Say will man die Funktion berechnen:Warum gibt Mod in einem Ausdruck ein anderes Ergebnis als in einem Funktionsaufruf?
f (x,y) = ((x `mod` 3)+(y `mod` 3)) `mod` 2
Wenn dann ein f (-1,0)
manuell erweitert wird, erhält man:
((-1 `mod` 3)+(0 `mod` 3)) `mod` 2
1
Wenn man jedoch eine Inline-Funktion verwendet, ist das Ergebnis:
let f (x,y) = ((x `mod` 3)+(y `mod` 3)) `mod` 2 in f (-1,0)
0
Was passiert beim Speichern der Funktion, die nicht das erwartete Ergebnis liefert?
Ich nehme an, das ist, weil f
Integral
statt Int
verwendet?
BTW (und in der Tat eng mit dem Problem verbunden): Sie brauchen nicht alle diese Parens; 'mod' bindet automatisch fester (' infixl 7 mod' vs. 'infixl 6 +'). Es wäre in Ordnung mit '' ((-1) 'mod'3 + 0'mod'3)' mod' 2''. – leftaroundabout
@leftaroundabout: Richtig, die Klammern wurden hinzugefügt, um das Problem aufzuspüren :(. –