在SML中实现Radix Sort

乔什·桑嫩伯格(Josh Sonnenberg)

我正在尝试通过一系列帮助函数在SML中实现基数排序。我遇到麻烦的辅助函数称为sort_nth_digit,它需要按一个数字位置进行排序,并需要一个列表进行排序(分别为n和L)。我这样做的方式是找到列表的前两个元素(现在我们可以假设至少有3个元素),将它们与数字n进行比较,然后以适当的顺序将它们串联回到列表中。该列表应按升序排序。现在,问题是:该函数可以编译,但是得到以下信息:

HW4.sml:40.5-44.30警告:匹配非穷举(0,L)=> ...(n,nil)=> ...(n,a :: b :: L)=> ...

val sort_nth_digit = fn:整数->整数列表->整数列表

另外,当您传递参数时,您没有得到答案,我认为这表明无限递归吗?

问:比赛如何不详尽,为什么我要无限递归:

 fun sort_nth_digit 0 L = []
|   sort_nth_digit n [] = []
|       sort_nth_digit n (a::b::L) = if ((nth_digit a n) < (nth_digit b n)) then a::b::(sort_nth_digit n L)
        else
            b::a::(sort_nth_digit n L)

我在这里先向您的帮助表示感谢!(*我关于stackoverflow ^。^ *的第一篇文章)

无匹配匹配修复:

fun sort_nth_digit 0 L = []
|   sort_nth_digit n [] = []
|       sort_nth_digit n (a::[]) = a::[]
|       sort_nth_digit n (a::b::L) = if ((nth_digit a n) < (nth_digit b n)) then a::b::(sort_nth_digit n L)
        else
            b::a::(sort_nth_digit n L) 

输入导致无输出,控制台位于此行:

- sort_nth_digit 1 [333,222,444,555,666,444,333,222,999]; 

nth_digit和匿名帮助程序战俘的代码:

fun nth_digit x 0 =  0
|   nth_digit x n = if (num_digits x) < n then 0
        else 
            let 
                fun pow x 1 = x
                |   pow x y= x * pow x (y-1)
            in
(*Finding the nth digit of x: ((x - x div 10^n) * 10^n div 10^n-1))*)
            (x - ((x div pow 10 n) * pow 10 n)) div (pow 10 (n-1))  (*Me*)
            end

如果有人认为访问我其余的代码会很有用,我可以通过github作为eclipse项目提供它(如果您没有为sml设置eclipse,则可以拉出.sml文件)

安德烈亚斯·罗斯伯格(Andreas Rossberg)

匹配并不详尽,因为它不包含仅包含一个元素的列表的情况(并且归纳为包含奇数个元素的任何列表的情况)。

我不确定“没有得到答案”的意思。除非您的nth_digit助手没有,否则此函数不会发散(无限递归)取而代之的是Match,由于上述原因,当您向它提供长度为奇数的列表时,应该得到一个异常。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

std :: sort在模板函数中

来自分类Dev

我应该使用Java集合sort()还是自己实现?

来自分类Dev

Collections.sort的Comparator <>中面临的问题

来自分类Dev

有关在Java中实现Radix sort的问题

来自分类Dev

Java中的Sort String []数组列表

来自分类Dev

Java 8中Collections.sort的问题

来自分类Dev

在对象中包装perl的sort函数

来自分类Dev

在Guile中的“ sort!”列表中,项目消失

来自分类Dev

Javascript Shell Sort实现比合并Sort更快

来自分类Dev

如何避免重新实现sort.interface类似golang结构

来自分类Dev

合并Sort C ++实现,无法识别代码中的错误

来自分类Dev

为什么std :: sort不使用我的operator <实现

来自分类Dev

Ruby中Hash#sort背后的逻辑

来自分类Dev

什么是允许Collections.sort的线程安全List实现

来自分类Dev

Golang排序:未实现sort.Interface(缺少Len方法)

来自分类Dev

如何在C中实现Counting Sort对char数组进行排序?

来自分类Dev

在React中组件的Map和Sort方法?

来自分类Dev

向量c ++中的sort元素

来自分类Dev

实现Sort时如何调用Icomparer.Compare()方法?

来自分类Dev

@Sort在Hibernate中不起作用

来自分类Dev

Java中的Sort String []数组列表

来自分类Dev

merge_sort()中的merge()如何工作?

来自分类Dev

了解python中的lambda的sort函数

来自分类Dev

单链接列表中的Quick_Sort

来自分类Dev

.sort在Swift 2.0中不起作用

来自分类Dev

如何在SML / NJ中使用LIST_SORT函数?

来自分类Dev

如何将Array.sort方法实现到我的actionPerformed中?

来自分类Dev

在终端中运行sort命令

来自分类Dev

python中.sort()方法的意外输出