ich dieses Stück Code haben:SML Liste Gleichheit oddness
fun foldr2(f, x::xs) =
if xs = [] then
x
else
f(x, foldr2(f, xs))
Mit dem Typ Signatur
(''a * ''a -> ''a) * ''a list -> ''a
Sieht ziemlich geradlinig, dauert es eine Funktion, die über die Gleichstellung Typen und einer Liste funktioniert des Gleichheitstyps als Argumente, wegen des Vergleichs xs = []
. Aus irgendeinem Grund funktioniert es bei Eingabe wie (op +, [2.3, 2.7, 4.0])
, wenn in SML/NJ Reals kein Gleichheitstyp ist. Kann mir jemand helfen, etwas Licht darüber zu bekommen, warum diese Magie auftritt?
+1, ich frage mich auch, warum das funktioniert. Es ist, als ob SML/NJ den Bedingungsblock in "null [2.3, 2.7, 4.0]" oder ähnliches übersetzt. –