【发布时间】:2013-02-09 23:21:13
【问题描述】:
我很好奇以下示例是否可以使用列表推导代替递归。
函数replaceFirst接受一个元素和一个列表,并替换列表中第一次出现的元素。
这可以使用递归来完成,如下所示:
replaceFirst _ [] = []
replaceFirst elem y (x:xs) | x==y = (elem:xs)
| otherwise = x:replaceFirst elem y xs
我的问题是,这个递归函数或类似的对列表中第一次出现的元素进行操作的递归函数可以替换为列表理解函数吗?为什么或者为什么不? (比起实际的代码,我更关心推理)。
【问题讨论】:
-
这不是stackoverflow.com/questions/14688716/…的复制品吗?删除和替换的区别不大,不影响是否可以用列表递归。
-
第一个等式缺少模式。
-
将列表理解视为
foreach循环可能会有所帮助,您可以在其中对每个元素应用过滤器和计算。请参阅此 wiki 中列表 monad 的do语法 haskell.org/haskellwiki/List_comprehension
标签: haskell