こんにちは私はちょうどHaskellに導入されたプログラミング言語のクラスです。宿題では、リスト内の要素の複数のインスタンスを削除できる関数を作成する必要がありました。私は1つの要素を削除することができる以前の関数を持っていましたが、removeMultipleElementsはガードされたステートメントを実行して空のリストにまっすぐに行きたくはありません。どんな助けもありがとうございます。私は文法的なものだと確信していますが、私は何がわかりません。保護された文が実行されないのはなぜですか?
は、ここでは、コード
--This one works great
removeElement x [email protected](y:ys)
| y == x = rest
| otherwise = y : rest
where
rest = removeElement x ys
removeElement _ _ = []
--this does not want to
removeMultipleElements [email protected](y:ys) [email protected](x:xs)
| elem y aList = removeMultipleElements ys (removeElement y aList)
| not (elem y aList) = removeMultipleElements ys aList
| otherwise = aList
removeMultipleElements _ _ = []
ようなもので
を交換する必要がありますこれを達成するために 'ctrl' +' k')。また、常にタイプシグネチャを追加してください! – leftaroundabout
編集:)型推論はすでに私がやりたいことを想定していることは私の理解であった。どちらもリターンリストです。 –
@KevinD私はその仮定をすることを提案しません...それはより奇妙に見えるタイプのエラーにつながる可能性があります。最上位レベルのバインディングのタイプを指定すると、エラーがはっきりとわかります(タイプチェッカーに一致させたいものを伝えているため)。トップレベルのタイプのシグネチャも、コードを読みやすくします。 –