test :: [String] -> [String]
test = foldr step []
where step x ys
| elem x ys = x : ys
| otherwise = ys
入力されるすべての個別の文字列で構成される新しいリストを作成しようとしています。私のテストデータは次のとおりです。
test ["one", "one", "two", "two", "three"]
期待される結果:
["one", "two", "three"]
私は Haskell に不慣れで、非常に基本的で明白な何かが欠けていると確信していますが、これを調査する方法が不足しています。私の考えがどこに欠けているかを教えていただけますか?
実際の応答は[]
です。最初のガード条件が満たされないようです (これを に置き換えるとTrue
、元のリストが複製されます)。そのため、出力リストは作成されません。
私の理解では、折り畳みはリストの各項目のステップの結果を蓄積し、それを空のリストに追加するというものでした。このステップでは、各項目が出力リストに含まれているかどうかをテストし (テストされた最初の要素がそこにない)、まだ出力リストに含まれていないものをすべて追加すると予想しました。明らかにそうではありません:-)