Почему эти следующие функции не работают одинаково?Первый делает правильное разбиение строки, но второй, кажется, продолжает добавлять "" навсегда, создавая бесконечный список
Правильный код:
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
Единственная отличающаяся часть - это условие разрыва, и мне действительно кажется, что оно должно делать то же самое ... плюс первая форма функции должна гарантировать, что я не смогу добавлять пустые списки в свой результат навсегда...Извините о нубистском вопросе и заранее спасибо