SML 中的自定义比较器排序?
Custom comparator sort in SML?
我对 SML/SMLNJ 中的这个问题有点困惑,我希望得到一些指导。
所以我遇到了一个问题,我需要创建一个名为 insertSorted 的函数,它需要一个数字、一个比较语句和一个需要插入的(假设排序的)列表。我不确定如何开始处理这个问题,所以任何帮助都会很棒。
我的想法是将两个列表分开,插入数字,然后连接两个列表。
fun insertSorted (x, comp, []) = [x]
| insertSorted (x, comp, a::rest) = ...
更新:我说得有点远了,我只需要知道如何调试它,有什么指导吗?
fun insertSorted (x, []) = [x]
| insertSorted (x, y::ys) =
if (x < y)
then x::y::ys
else if (x > y)
then y::x::ys
else y::insertSorted (x, ys);
更新 2:我的新目标是弄清楚如何将这两个功能合并为一个。最终命名为 insertSorted.
fun insertSorted (x, nil) = [x]
| insertSorted (x,y::ys) = if x<y then x::y::ys else y :: insertSorted (x,ys);
fun insertSorted (x, nil) = [x]
| insertSorted (x,y::ys) = if x>y then y::x::ys else y :: insertSorted (x,ys);
分三种情况:
- 名单是
nil
。
- 你已经讲过了。 :-)
- 列表不是
nil
,它的第一个元素小于x
,所以我们需要一直寻找插入的地方x
。
- 在这种情况下,结果应该是第一个元素,然后是将
x
插入列表其余部分的结果。
- 列表不是
nil
,它的第一个元素大于或等于x
,所以我们可以在这里插入x
。
- 在这种情况下,结果应为
x
,后跟整个列表。
区分案例 #2 和 #3 涉及 if
/then
/else
;实施案例 #2 涉及递归。
我对 SML/SMLNJ 中的这个问题有点困惑,我希望得到一些指导。 所以我遇到了一个问题,我需要创建一个名为 insertSorted 的函数,它需要一个数字、一个比较语句和一个需要插入的(假设排序的)列表。我不确定如何开始处理这个问题,所以任何帮助都会很棒。
我的想法是将两个列表分开,插入数字,然后连接两个列表。
fun insertSorted (x, comp, []) = [x]
| insertSorted (x, comp, a::rest) = ...
更新:我说得有点远了,我只需要知道如何调试它,有什么指导吗?
fun insertSorted (x, []) = [x]
| insertSorted (x, y::ys) =
if (x < y)
then x::y::ys
else if (x > y)
then y::x::ys
else y::insertSorted (x, ys);
更新 2:我的新目标是弄清楚如何将这两个功能合并为一个。最终命名为 insertSorted.
fun insertSorted (x, nil) = [x]
| insertSorted (x,y::ys) = if x<y then x::y::ys else y :: insertSorted (x,ys);
fun insertSorted (x, nil) = [x]
| insertSorted (x,y::ys) = if x>y then y::x::ys else y :: insertSorted (x,ys);
分三种情况:
- 名单是
nil
。- 你已经讲过了。 :-)
- 列表不是
nil
,它的第一个元素小于x
,所以我们需要一直寻找插入的地方x
。- 在这种情况下,结果应该是第一个元素,然后是将
x
插入列表其余部分的结果。
- 在这种情况下,结果应该是第一个元素,然后是将
- 列表不是
nil
,它的第一个元素大于或等于x
,所以我们可以在这里插入x
。- 在这种情况下,结果应为
x
,后跟整个列表。
- 在这种情况下,结果应为
区分案例 #2 和 #3 涉及 if
/then
/else
;实施案例 #2 涉及递归。