【发布时间】:2017-12-12 02:22:23
【问题描述】:
我在 SML 中制作插入排序代码,这里是
fun compare(x:real, y:real, F) = F(x, y);
fun isEqual(x:real, y:real) = ((x <= y) andalso (x >= y));
fun rinsert(x: real, [], F) = [x]
|rinsert(x, (y::ys), F) =
if isEqual(x, y) then rinsert (x, ys, F)
else if compare(x, y, F) then x::y::ys
else y::(rinsert (x, ys, F));
fun rinsort([], F) = []
|rinsort(x::xs, F) = rinsert(x, (rinsort(xs, F), F));
但是,在运行它时,我得到了这个错误
val isEqual = fn : real * real -> bool
val rinsert = fn : real * real list * (real * real -> bool) -> real list
stdIn:12.27-12.58 Error: operator and operand don't agree [tycon mismatch]
operator domain: real * real list * (real * real -> bool)
operand: 'Z * ('Y list * 'X)
in expression:
rinsert (x,(rinsort (<exp>,<exp>),F))
我了解 rinsort 错误地调用了 rinrt,但我不知道如何解决它。
【问题讨论】:
-
rinsert接受多少个参数?你和几个人打电话? -
rinsert 接受三个参数,一个实数、一个列表和一个运算符(如 op
-
我不明白您所说的“应该只调用三个”是什么意思。看代码。计算论据。有几个?
-
哇,这对我来说是一个可怕的疏忽,谢谢伙计。现在工作得很好
标签: sml insertion-sort smlnj operand