Say ktoś chce obliczyć funkcję:Dlaczego mod daje inny wynik w wyrażeniu niż w wywołaniu funkcji?
f (x,y) = ((x `mod` 3)+(y `mod` 3)) `mod` 2
Następnie, jeśli jedna rozszerza f (-1,0)
ręcznie, dostaje:
((-1 `mod` 3)+(0 `mod` 3)) `mod` 2
1
Jeśli jednak używa funkcji inline, wynik jest:
let f (x,y) = ((x `mod` 3)+(y `mod` 3)) `mod` 2 in f (-1,0)
0
Co dzieje się podczas zapisywania funkcji, która nie daje oczekiwanego rezultatu?
Zakładam, że to dlatego, że f
używa Integral
zamiast Int
?
BTW (i rzeczywiście blisko związany z problemem): nie potrzebujesz wszystkich tych parens; 'mod' wiąże się automatycznie mocniej (' infixl 7 mod' vs 'infixl 6 +'). Nic ci nie jest z '' ((-1) 'mod'3 + 0'mod'3)' mod' 2''. – leftaroundabout
@leftaroundabout: Prawda, dodano nawiasy, aby wyśledzić problem :( –