1. ホーム
  2. list

[解決済み】Haskellを学ぶ。HaskellでListからアイテムを削除する方法

2022-01-28 01:04:02

質問

Haskellを学ぼうとしています。組み込み関数(delete...だと思う)を使わずに、リストから数字を削除する簡単な関数を書こうとしています。簡単のために、入力パラメータはInteger、リストはIntegerリストであるとします。以下は私が持っているコードですが、以下のコードのどこが問題なのか教えてください。

areTheySame :: Int -> Int-> [Int]

areTheySame x y | x == y = []
                | otherwise = [y]

removeItem :: Int -> [Int] -> [Int]

removeItem x (y:ys) = areTheySame x y : removeItem x ys

解決方法は?

他の方がおっしゃるとおり、問題は : 演算子を使用します。私が言いたいのは、あなたの areTheySame 関数がリストを返すというのは、いずれにせよ間違ったアプローチですが。に切り替えるよりも、むしろ ++ 演算子で、その関数のより良い実装をすることができます。

removeItem _ []                 = []
removeItem x (y:ys) | x == y    = removeItem x ys
                    | otherwise = y : removeItem x ys

ご覧のように、これはかなりシンプルな実装です。また、このようにコンサイスすることで、リストを大量に追加するよりも、プログラムへの負担がずっと少なくなります。他にも、怠惰に作業できるなどの利点があります。