SML中的自定义比较器排序?

SML中的自定义比较器排序?,sml,smlnj,Sml,Smlnj,我在SML/SMLNJ中遇到了这个问题,我希望得到一些指导。 所以我遇到了一个问题,我需要创建一个名为insertSorted的函数,其中需要插入一个数字、一个比较语句和一个(假定已排序的)列表。我不知道如何开始接近这一点,所以任何帮助都将是惊人的 我的想法是将两个列表拆分为数字所在的位置,插入数字,然后连接两个列表 fun insertSorted(x,comp,[])=[x] |insertSorted(x,comp,a::rest)=。。。 更新:我现在更进一步了,我只需要知道如何调试这

我在SML/SMLNJ中遇到了这个问题,我希望得到一些指导。 所以我遇到了一个问题,我需要创建一个名为insertSorted的函数,其中需要插入一个数字、一个比较语句和一个(假定已排序的)列表。我不知道如何开始接近这一点,所以任何帮助都将是惊人的

我的想法是将两个列表拆分为数字所在的位置,插入数字,然后连接两个列表

fun insertSorted(x,comp,[])=[x]
|insertSorted(x,comp,a::rest)=。。。
更新:我现在更进一步了,我只需要知道如何调试这个,有什么指导吗

fun insertSorted(x,[])=[x]
|插入排序(x,y::ys)=
if(xy),则为else
然后y::x::ys
else y::insertSorted(x,ys);
更新2:我的新目标是找出如何将这两个函数合并为一个。最终命名为insertSorted

fun insertSorted(x,nil)=[x]
|insertSorted(x,y::ys)=如果为xy,则为y::x::ys,否则为y::insertSorted(x,ys);
有三种情况:

  • 该列表为
    nil
    • 您已经介绍了这一点。:-)
  • 列表不是
    nil
    ,它的第一个元素小于
    x
    ,因此我们需要继续搜索插入
    x
    的位置。
    • 在这种情况下,结果应该是第一个元素,然后是将
      x
      插入列表其余部分的结果
  • 列表不是
    nil
    ,它的第一个元素大于或等于
    x
    ,因此我们可以在这里插入
    x
    • 在这种情况下,结果应该是
      x
      ,后跟整个列表

  • 区分案例2和案例3涉及
    如果
    /
    那么
    /
    其他
    ;实施案例2涉及递归。

    非常感谢您花时间回答!我的一个问题是如何通过比较。我测试它的代码如下:“insertSorted(5,fn(a,b)=>afn(a,b)=>a是一个函数,它接受一对值并返回第一个值是否小于第二个值。(顺便说一下,它是一个函数或函数表达式,而不是一个语句。标准ML实际上没有“语句”,但它的最接近的类比应该是一个“声明”,这不是.t。MasunARCIA:考虑函数<代码>有趣的双i=2 *i/c>,它取一个整数并返回一个整数。(例如,
    double 3
    6
    )。你找不到任何关于整数
    i
    的文档,因为它不是一个特定的整数;它只是一个函数参数,可以是任何整数。同样,在你的例子中,
    comp
    不是一个特定的函数;它只是一个函数参数,可以是
    int*int->bool
    类型的任何函数。(如果这个概念对您来说是新概念,并且您很难理解它,请查看。)