林在SML使插入排序的代码,这是SMLNJ插入排序操作和操作数不同意错误
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不正确地调用rinsert,但我不知道如何解决它。
'rinsert'需要多少个参数?你打了几个电话? – melpomene
rinsert需要三个参数,一个实数,一个列表和一个运算符(如op <)。它应该只是叫三个 – small502
我不明白你的意思是“*它只应该叫三*”。看代码。计算参数。那里有多少? – melpomene