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