リストの2つの同じエントリを削除する関数を作成しようとしました。 (リストに2つの同一のエントリがあるとすぐに、それらを削除する必要があります)。再帰関数を実行すると、期待どおりに機能します。これは、パターンマッチングに依存しています:`f x = x`は` f = id`と等価ではありませんか?
f :: Eq a => [a] -> [a]
f(a:b:xs)|a==b = f xs
|otherwise = a : f (b:xs)
f x=x -- if the list has less than two entries
は、今私はしかし、我々はf=id
ように、第2のケースを書き換えることができますが、コード
f :: Eq a => [a] -> [a]
f(a:b:xs)|a==b = f xs
|otherwise = a : f (b:xs)
f = id
のために私は理解していないエラー、以下の取得:
を\path\to\my\program.hs:1:1:
Equations for `f' have different numbers of arguments
\path\to\my\program.hs:
(1,1)-(2,34)
\path\to\my\program.hs:
3:1-6
Failed, modules loaded: none.
私は両方とも同じ数の引数を持っていますが、GHCは同意していないようです。
'f = id'と言うと、文字通り' f'を 'id'のエイリアスにするだけです。このエラーは、関数定義の1つの形式から引数を省略することはできません。迷惑だが、大したことではない。 'x'を' id'に明示的に渡すだけです。もちろん、それは目的を破るので、あなたの最初の方法を使用してください。 – Carcigenicate
ありがとう、それは面白いです。私はこのような例に遭遇したことはありません。私はしばらくの間、ハスケルで遊んでいました。これが言及されているチュートリアル/書籍/リファレンスをご存知ですか? – flawr
いいえ、私はこれが誰もが最終的に実行するそれらの癖の一つだと思います。しかし、ほとんどの場合、ほとんどの場合、引数を省略した関数定義を書いているので、ポイントフリーの形式になっており、部分的に適用されている別の関数の短所に過ぎないので、 。 – Carcigenicate