pattern matching 代码顺序影响运行的效率吗?
代码如下?
- factorial1 0 = 1
- factorial1 (n+1) = (n+1) * factorial1 n
复制代码
- factorial2 (n+1) = (n+1) * factorial2 n
- factorial2 0 = 1
复制代码
以上两个函数运行的效率后者快一些吗?
[ 本帖最后由 izhier 于 2009-4-1 20:04 编辑 ]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
对了,还有
guards 好像数学中的大括号分类
向数学书写习惯靠拢撒,类似的还有 [ x | ...]
不知为何 haskell 要添加 pattern matching 中 + 这一特例 ?
支持
这个我倒不认为是 BUG。
定义域之外的东西,不需要过分地去关心它。
只需要做 UI 的时候注意就可以了。
在 pattern matching 中用 (n+1) 来匹配大小为 >= 1 的参数, (n+k) 来匹配大小为 >= k 的参数
其实下面的代码有一个 bugger
复制代码
就是:当 n 为负数时,将会产生
ERROR - Control stack overflow
[ 本帖最后由 izhier 于 2009-4-2 15:08 编辑 ]
不会, factorial2 (n+1) 是所谓的 n+k patterns,其行为有点令人感到意外。
factorial2 (n+1) 不会匹配 factorial2 0,它只匹配 >= 1 的值。
[ 本帖最后由 win_hate 于 2009-4-2 14:25 编辑 ]
后面那种会不会导致 0 永远都匹配不上啊?
Haskell 的 pattern matching 是顺序进行的,因此,针对你的例子,理论上来说,后面的是会快一点。