gpt4 book ai didi

haskell - 递归还是列表理解?

转载 作者:行者123 更新时间:2023-12-02 05:14:41 24 4
gpt4 key购买 nike

通过Learn You a Haskell For Great Good,在有关高阶函数的章节中,作者介绍了一些不同库函数的实现。当谈到 filter' 的定义(标准库函数 filter 的重新实现)时,我认为显而易见的是:

filter' f xs = [x | x <- xs, f x]

但作者给出了以下更长的递归定义:

filter' _ [] = []  
filter' p (x:xs)
| p x = x : filter' p xs
| otherwise = filter' p xs

两个定义都做同样的事情。这有什么原因吗?递归定义的性能是否更高?对于 Haskell 来说它更惯用吗?还有别的吗?

最佳答案

这可能是因为列表推导式只是语法糖,原则上会转换为递归形式。

如果作者的目的是说明函数是如何实现的,那么使用列表理解快捷方式并不能真正做到这一点 - 它显示了表达解决方案的另一种方法,但不是真正的函数实现。

简而言之,它展示了如何通过相当少的一组基本构建 block 来实现。

不过,这只是一个猜测 - 我自己还没有读过该教程。

关于haskell - 递归还是列表理解?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6636400/

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