gpt4 book ai didi

haskell - 使用列表理解代替递归

转载 作者:行者123 更新时间:2023-12-04 23:24:31 24 4
gpt4 key购买 nike

我很好奇以下示例是否可以使用列表理解代替递归。

函数replaceFirst它接受一个元素和一个列表,并替换列表中第一次出现的元素。

这可以使用递归来完成,如下所示:

replaceFirst _ [] = []
replaceFirst elem y (x:xs) | x==y = (elem:xs)
| otherwise = x:replaceFirst elem y xs

我的问题是,这个递归函数或类似的对列表中第一次出现的元素进行操作的递归函数可以替换为列表理解函数吗?为什么或者为什么不? (我更关心推理而不是实际代码)。

最佳答案

列表推导式是 syntactic sugar用于各种形式的map , filter,concatMap .如果您的递归函数可以用这些来描述,那么您可以将其重写为列表推导式。它们不能像上面那样短路,也不能通过累积状态。

您的 replaceFirst似乎需要一个累加器来“告诉”列表中较晚的元素有关较早元素的外观。我认为这使得仅使用列表理解语法很难或不可能编写。

关于haskell - 使用列表理解代替递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15056405/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com