首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Haskell尾递归可预测性

Haskell尾递归可预测性
EN

Stack Overflow用户
提问于 2011-09-05 12:57:42
回答 1查看 316关注 0票数 1

我对haskell最大的问题之一是能够(正确地)预测haskell代码的性能。虽然我有一些更难的问题,但我意识到我几乎没有理解。

举个简单的例子:

代码语言:javascript
复制
count [] = 0
count (x:xs) = 1 + count xs 

据我所知,这并不是严格意义上的尾部调用(它应该在堆栈上保留1),所以看看这个定义--我能从中推断出什么呢?count函数显然应该有O(1)的空间需求,但是这个函数有吗?我能保证它会或不会吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-05 13:15:16

如果你想更容易地推断递归函数,请使用具有已知时间和空间复杂度的高阶函数。如果您使用foldl或foldr,您就知道它们的空间复杂度不能为O(1)。但是如果您使用Data.List中的foldl‘,如

代码语言:javascript
复制
count = foldl' (\acc x -> acc + 1) 0 

你的函数的空间复杂度将为O(1),因为根据定义,foldl‘是尾递归的。

HTH克里斯

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7304020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档