作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
通过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/
我想弄清楚为什么这不起作用。 我在 Typescript 上使用 React 和 Redux。 我有以下代码: import * as React from 'react'; import * as
我想申请重新投递并使用死信 channel 。所以发现这个非常有用的apache-camel FAQ link 。我按照本网站中提到的步骤进行操作。 我添加了更多逻辑,代码可以在 github 中找到
我是一名优秀的程序员,十分优秀!