Haskellでは、
これは完全に正常に機能します(mod 9) 7
。これにより、期待される結果が得られます。9を7で割ったときの余り(2)。
同様に、これも機能します(mod 9) 9
。0を返します。
これは私にそれ(mod 9 == 0) 9
が戻るべきだと思いましたTrue
。ただし、そうではありませんでした。代わりにエラーが発生しました。
エラー:
<interactive>:62:1: error:
• Couldn't match expected type ‘Integer -> t’
with actual type ‘Bool’
• The function ‘mod 9 == 0’ is applied to one argument,
but its type ‘Bool’ has none
In the expression: (mod 9 == 0) 9
In an equation for ‘it’: it = (mod 9 == 0) 9
• Relevant bindings include it :: t (bound at <interactive>:62:1)
なぜ(mod 9 == 0) 9
戻らないのか理解するのを手伝ってくださいTrue
。
PS:Haskellのコンテキストでの「return」の使用には欠陥があると確信しています。ただ、まだ始めたばかりですので、失礼します。(私が本当に間違っているなら、あなたが私を訂正することができればいいでしょう。)
コメントで述べたようにmod 9 == 0
、引数を取り、それをmod 9
に渡して、比較の結果を返す関数であることが期待されているようです。このような式を書くことはできますが、もう少し複雑です。
>>> ((== 0) . (mod 9)) 9
True
ここでは、(== 0) . (mod 9)
2つの関数の組成物である、(== 0)
とmod 9
。構成された関数は、その引数を取りmod 9
、それに適用して(== 0)
から、結果に適用します。((== 0)
の短縮形はどこにあり\x -> x == 0
ますか。)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加