私は現在、Programming in Haskellという本(これは絶対に素晴らしい)ですが、運動4.8.8の問題に遭遇しました。HaskellのLuhn関数
タスクは(数字を倍増し、その結果が9より大きい場合9を減算)ヘルプ機能luhnDouble :: Int -> Int
とmod
funcionを使用して、HaskellではLuhn algorithmを実現することです。
luhnDouble
の機能を実装することは問題ありませんでしたが、私はそれらの両方をタイプInt -> Int -> Int -> Int -> Bool
の機能に持っていくことに苦労しています。私はそれを二つの方法をやって試してみました
は:
luhn :: Int -> Int -> Int -> Int -> Bool
luhn w x y z = if (((luhnDouble w) + x + (luhnDouble y) + z) mod 10) == 0 then True
else False
私は型エラーを受け取ります。
* Couldn't match expected type `(Integer -> Integer -> Integer)
-> Integer -> Integer'
with actual type `Int'
* The function `(luhnDouble w) + x + (luhnDouble y) + z'
is applied to two arguments,
but its type `Int' has none
In the first argument of `(==)', namely
`(((luhnDouble w) + x + (luhnDouble y) + z) mod 10)'
In the expression:
(((luhnDouble w) + x + (luhnDouble y) + z) mod 10) == 0
しかし、私は、引数として機能する4 Int
秒を与え、結果としてBool
を得ていないのですか?
luhn :: Int -> (Int -> (Int -> Bool))
luhn = \w ->(\x ->(\y -> (\z -> ((luhnDouble w) + x + (luhnDouble y) + z mod 10))))
しかし、私は、結果としてBool
値を取得するには、ここでif
式に持参するかどうかはわかりません。
誰でも私を助け、私にこれを解決する方法のヒントを教えてください。
そして、あなたの 'if'式が無効です。あなたは "else"の場合がありません。 – Carcigenicate
ああ、忘れて申し訳ありません。私は今それを追加します! – TheCoolFrood
そして、あなたは中置詞として 'mod'を使っていますが、バッククォートで囲まれていないので、引数として扱われています。それはおそらくあなたのエラーです。 – Carcigenicate