【发布时间】:2012-01-23 15:21:40
【问题描述】:
为什么以下这些功能不一样?第一个是进行正确的字符串拆分,但第二个似乎永远添加“”,创建一个无限列表
正确的代码:
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
唯一不同的部分是中断条件,在我看来它确实应该做同样的事情......加上第一个函数表单应该确保我不会永远在我的结果中添加空列表......很抱歉提出这个问题并提前感谢
【问题讨论】:
标签: haskell functional-programming