練習として、私はプレリュードの興味深い部分を手動で実装しようとしています。ポイントフリーになる機会が見つかるたびに私はそれを取る。しかし、これは私を最も恐ろしい場所のレンガの壁に導いてしまった。このコードを使用する:関数ポイントを書き込もうとしていませんが、GHCIは承認しません
myelem _ [] = False
myelem x y = if x == head y then True else myelem x (tail y)
notElem
を実装しようとしています。ここに私の試みがあります:
-- First
mynotelem = not myelem
私は、マッチングしていないタイプのために理解できないほど爆発します。これは、簡単に固定されている:
-- Second
mynotelem x y = not (myelem x y)
は、引数xとyの明示的な宣言は、醜い、不要な感じしかし、私は戻ってポイント自由なスタイルにそれを取得しよう。
Couldn't match expected type `Bool'
with actual type `a0 -> [a0] -> Bool'
In the second argument of `($)', namely `myelem'
In the expression: not $ myelem
In an equation for `mynotelem': mynotelem = not $ myelem
十分なフェアで失敗
-- Third
mynotelem = not $ myelem
、種類がまだ一致しません。しかし、どうやってそれを修正するのですか?再びあなたはすぐにジャンプすることができます
-- Fourth
mynotelem x y = not $ myelem x y
これはうまくいきますが、ちょうど円に近づくように近いです。私は、引数の1つを削除することができることを発見しました:しかし、厄介なxはまだ残っています。どうすればそれを排除できますか?
ThelronKnuckle:あなたの避難所であれば複数の引数については
、パターンは次のように続けます'($)'と '(。) 'の違いに関するSOの質問を検索してください - これらの質問/回答が役立つと思います。 –