2017-11-15 3 views
-2

私はハスケルを初めて使い、次の2つの機能をどのように実現できるかを考えようとしています。ハスケル:3つの変数内の別個の値を調べて、別個の変数を数えてください。

  1. 入力3つの整数およびそれらの2が等しいかどうかを確認(例えば1,2,2 -> true1,2,3 -> false
  2. 入力3つの整数と異なる値(例えば1,1,2 -> 2

を数えるありがとうございました。

+3

こんにちは、それを書くの手の込んだ方法!これまでに何を試しましたか?なぜそれは動作しませんでしたか?あなたはどうやってやるのか分かりませんでしたか? – rampion

+0

5つのすべてのケースを明示的に 'if' /' else'(あるいは必要ならガード)とマッチさせてください。その後、単純化する。 – Bergi

+1

あなたの入力がリストである場合は特に、 'nub'はあなたの友人です。 – Bergi

答えて

1

ソート、グループの要素と異なる要素の数は数よりも少なくなります重複がある場合、あなたに

distinct = length . group . sort 

は、上記の定義を使用して個別の要素のカウントを与える等価クラスを数えます要素の

dups = liftM2 (/=) length distinct 

これは単に

dups x = length x /= distinct x 
+0

(あなたは 'distinct'が型署名を必要としている、そうでなければmonomorphism制限モンスターがあなたを得ます) – luqui

関連する問題