Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SML中的标准排序函数?_Sml - Fatal编程技术网

SML中的标准排序函数?

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库中没有定义排序功能

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库中没有定义排序功能,但是大多数实现扩展了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编译器都有自己的(非标准的,讽刺的)排序库。由于这些文档缺少示例,下面介绍如何使用各种模块按升序对字符串列表进行排序:

  • 在SML/NJ和MLton中,使用以下功能:

    - 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,因此我必须以某种方式显式地注释我正在比较字符串

  • 在莫斯科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
    
    这个库的怪癖在于Moscow ML的交互式REPL不能自动加载
    Listsort
    。键入
    load“Listsort”仅在交互式REPL中是必需的;编译程序时,不使用加载

  • 在Poly/ML中,没有用于排序的库,因此必须定义自己的排序函数


  • 如果这两个排序函数都不足够,那么以下是一些用标准ML编写的其他排序函数:

  • 将一个(这不是真正的快速排序)与John Coleman的实现进行比较

  • :


  • 这是我的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时,这个排序器才会保留顺序