Desen eşleştirmem gereken iki argümanı olan bir işleve sahibim. İlk desen üzerinde Currying kullanırsanız o derlenmeyecektir:Neden desen eşlemede diğerlerinden değil, desenlerden birini körleyebilirim?
drop' :: Int -> [a] -> [a]
drop' 0 = id -- ghci: "Equations for drop' have different numbers of arguments"
drop' n (x:xs) = drop' (n-1) xs
derleyici bu çıktıyı verir: Ben sadece curried desen verirsen
99.hs:106:3:
Equations for drop' have different numbers of arguments
99.hs:106:3-15
99.hs:107:3-33
In an equation for `split':
split xs n
= (take' n xs, drop' n xs)
where
take' 0 _ = []
take' n (x : xs) = x : take (n - 1) xs
drop' 0 = id
drop' n (x : xs) = drop' (n - 1) xs
Failed, modules loaded: none.
Ancak o zaman derler:
drop' :: Int -> [a] -> [a]
drop' 0 = id -- compiles
Ne verir?
Bildiğini varsayarak kolayca yazabilirsin 'drop' 0 x = x'? – Koterpillar
Bir işlevi tanımlayan tüm denklemlerin aynı sayıda argümana sahip olması gerekir. Yani bırak 0 = id; bırakın n = \ (_: xs) -> bırak (n-1) xs' derlerdi. –
[Bir işlevi tanımlayan tüm koşulların bitişik olması gerektiğini unutmayın, ** ve her bir maddede kalıpların sayısı aynı olmalıdır. **] (http://www.haskell.org/onlinereport/haskell2010/haskellch4.html# x10-830004.4.3) –