doブロック内でパターンが一致するのはなぜですか?これらのパターンマッチは重複しているのはなぜですか?
(q, m) <- newRq
let m2 = appendMsg "first" key m
(q4, m4) = case m2 of
m -> deleteRec key q m2
_ -> (q, m2)
これは警告
Warning: Pattern match(es) are overlapped
In a case alternative: _ -> ...
でコンパイルし、私がしたいように動作しません。 (q4、m4)の場合は、常にそれが返されるようです。
[], fromList []
m2とmの値は無視されます。私はそれらを期待していないローカル変数はありますか?
単語で達成したいこと:m2とmが等しい場合、(q4、m4)はdeleteRec key q m2
に、そうでない場合は(q、m2)になるはずです。
trueの場合はtrueですが、私はいつもそれが慣用ではないことを読んでいるので、避けるために1時間座っていました。ハスケルの開発者は可能な限りパターンマッチングを使用するべきです。 –
はい、できるだけパターンマッチングを使用してください*。しかし、変数の* value *と照合することはできません。パターン内の変数は、何かを取ることができる '_'のような単なる「穴」です。その名前にそこにあったものを割り当てます。 –
if-then-elseの代替手段はまだありますか? –