私は一見シンプルなHaskellの問題を抱えています。私の限られた知識では、それを解決するためにどのような用語を検索するのか不明です。haskell初期アキュムレータ 'null'値
私は99のHaskellの問題(リストから連続した重複を削除)から、問題番号8を解決しようとした、これは私が作ってみたものです:
compress :: (Eq a) => [a] -> [a]
compress list = compress' list ???
where
compress' [] _ = []
compress' (x:xs) last
| x == last = compress xs last
| otherwise = x : compress xs x
「???」これは私が何をすべきかわからない場所です。スニペットがどのように動作することが意図されているのかはっきりしていなければならないと思います。 'last'は要素が以前のものと重複しているかどうかをチェックするためのアキュムレータです。 ここでは、どのような初期値を与えることができますか? (私が思うほとんどのオブジェクト指向言語では 'ヌル'に類似しています)。
編集:Tikhonの答えが働いていますが、私は自分のオリジナルの投稿に間違いをしたことに気付きました。したがって、私の問題に対する「些細な」解決策は、今すぐです:
compress :: (Eq a) => [a] -> [a]
compress list = compress' list Nothing
where
compress' [] _ = []
compress' (x:xs) Nothing = x : compress' xs (Just x)
compress' (x:xs) (Just last)
| x == last = compress' xs (Just last)
| otherwise = x : compress' xs (Just x)
'???ただのプレースホルダです。 '??? 'で' 'を変更してreloadすると、GHCiはどのタイプが"型付きの穴 "にあるべきか推測しようとします。 – danidiaz
'compress [] = []; compress(x:xs)= x:compress 'xs x' – melpomene