Im faire un code de tri d'insertion dans SML, ici il estsmlnj insertion Trier l'opérateur et Opérande DonT accord erreur
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));
Cependant, sur l'exécution de ce que je reçois cette erreur
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))
Je comprends que rinsort appelle incorrectement rinsert, mais je ne suis pas sûr de savoir comment le réparer.
Combien d'arguments prend 'rinsert'? Avec combien en appelez-vous? – melpomene
rinsert prend trois arguments, un réel, une liste et un opérateur (comme op <). Il ne devrait appeler que les trois – small502
Je ne comprends pas ce que vous voulez dire par "* il ne devrait appeler que les trois *". Regardez le code. Comptez les arguments. Combien y en a-t-il? – melpomene