これらの機能が同じ機能を果たしないのはなぜですか?一つ目は、適切な文字列分割を行っているが、もう一つは永遠に「」追加し続けるように見える、無限リストにこれらの2つのコードが同じように動作しないのはなぜですか?
右のコード作成:
my_split :: [Char]->Char->[[Char]]
my_split [] _ = [[]]
my_split lista y
| notElem y lista=[lista]
| otherwise=isMatch:(my_split rest y)
where
isMatch=takeWhile (/=y) lista
rest=tail $ dropWhile (/=y) lista
悪いコード:
my_split :: [Char]->Char->[[Char]]
my_split [] _ = [[]]
my_split lista y
| notElem y lista=[lista]
| otherwise=isMatch:(my_split rest y)
where
(isMatch,rest)=break (==y) lista
違う部分だけがブレーク条件で、実際には同じことをする必要があるようです...最初の関数形式は、私の結果に空のリストを永久に追加しないようにする必要があります... noobishについては申し訳ありません事前に質問と感謝