SML中的标准排序函数?
SML中是否有标准的排序功能?互联网上的文档太少了,我找不到任何文档。这个列表如何排序?你总是可以用reverse来得到相反的结果SML中的标准排序函数?,sml,Sml,SML中是否有标准的排序功能?互联网上的文档太少了,我找不到任何文档。这个列表如何排序?你总是可以用reverse来得到相反的结果 - fun sort(L) = if L=[] then [] else if tl(L)=[] then L else merge(sort(take(L)), sort(skip(L))); val sort = fn : int list -> int list 请看。雷切尔只对了一部分。的确,SML Basis库中没有定义排序功能
- fun sort(L) =
if L=[] then []
else if tl(L)=[] then L
else merge(sort(take(L)), sort(skip(L)));
val sort = fn : int list -> int list
请看。雷切尔只对了一部分。的确,SML Basis库中没有定义排序功能,但是大多数实现扩展了Basis库并添加了额外的功能
因此,MosML同时有一个和一个模块,SML/NJ有一个带有ListMergeSort实现的签名。它还具有一些其他排序特性,如MosML。有关完整列表,请参阅SML/NJ库手册的。这里是一个标准的快速排序
fun qsort(func) =
let fun sort [] = []
| sort (lhd :: ltl) =
sort (List.filter (fn x => func (x, lhd)) ltl)
@ [lhd]
@ sort (List.filter (fn x => not (func(x, lhd)) ltl)
in sort
end
只需输入一些比较器(接受两个相同类型的元素并返回布尔值的函数),它就会为您返回一个排序函数
如果你还有问题,不要犹豫,尽管问。:) 正如Jesper Reenberg指出的,标准的ML编译器都有自己的(非标准的,讽刺的)排序库。由于这些文档缺少示例,下面介绍如何使用各种模块按升序对字符串列表进行排序:
- fun sortStrings ss = ListMergeSort.sort (fn (s : string, t) => s > t) ss;
[autoloading]
[library $SMLNJ-LIB/Util/smlnj-lib.cm is stable]
[autoloading done]
val sortStrings = fn : string list -> string list
- sortStrings ["World","Hello"];
val it = ["Hello","World"] : string list
- load "Listsort";
> val it = () : unit
- fun sortStrings ss = Listsort.sort String.compare ss;
> val sortStrings = fn : string list -> string list
- sortStrings ["World", "Hello"];
> val it = ["Hello", "World"] : string list
这个库函数的怪癖在于它采用了一个“大于”的布尔谓词。由于标准ML的>
运算符重载,但默认为int,因此我必须以某种方式显式地注释我正在比较字符串- fun sortStrings ss = ListMergeSort.sort (fn (s : string, t) => s > t) ss;
[autoloading]
[library $SMLNJ-LIB/Util/smlnj-lib.cm is stable]
[autoloading done]
val sortStrings = fn : string list -> string list
- sortStrings ["World","Hello"];
val it = ["Hello","World"] : string list
- load "Listsort";
> val it = () : unit
- fun sortStrings ss = Listsort.sort String.compare ss;
> val sortStrings = fn : string list -> string list
- sortStrings ["World", "Hello"];
> val it = ["Hello", "World"] : string list
这个库的怪癖在于Moscow ML的交互式REPL不能自动加载Listsort
。键入load“Listsort”代码>仅在交互式REPL中是必需的;编译程序时,不使用加载
如果这两个排序函数都不足够,那么以下是一些用标准ML编写的其他排序函数:
这是我的sml排序算法
fun sort list = foldr (fn (x,lst)=> List.filter (fn a => a < x) lst @ [x] @ List.filter (fn a => a >= x) lst ) [] list;
sort [5,1,5,0,2,5,~2,5,~10,0];
output: [~10,~2,0,0,1,2,5,5,5,5]
fun sort list=foldr(fn(x,lst)=>list.filter(fn a=>aa>=x)lst)[]列表;
排序[5,1,5,0,2,5,~2,5,~10,0];
输出:[~10,~2,0,0,1,2,5,5,5,5]
我希望它有帮助你想分类什么?我不知道你说的scarse是什么意思,但是主页是一个查找功能的好地方。什么是合并、获取和跳过?很抱歉问一下,这里有很多文档。所以我假设SML中没有标准的排序函数,对吗?不,你必须创建自己的排序函数。顺便说一下,当且仅当func(x,y)=false for x=y时,这个排序器才会保留顺序