|
|
1
4
正如其他人所说,一个无限循环 是 可能通过 tail recursions .
例如。
但是
还是有道理的。考虑使用无限循环的Windows API示例。这不是功能性的。记住-功能意味着思考 价值观 (和) 什么 他们的意思是)因此,我们更愿意采用类似这样的反应式/基于事件的方法[伪功能代码]
所以
是 技术上 错-你 可以 实现无限循环-但这样做通常没有(功能)点。为什么除了某种IO轮询之外还需要它?以纯粹的功能性方式转换值应该是有意义的。 |
|
|
2
5
如果你使用 tail recursion 您实际上有一个迭代,比如for/while循环。因此,我想您可以有一个无限循环,而不会得到堆栈溢出。 关于你的问题: “无限循环是否是函数编程的错误思维模式?” 也许这会有帮助: - While or Tail Recursion in F#, what to use when? |
|
|
3
1
你可以拥有无限 tail recursion 如果编译器能识别它。有些语言,例如Scheme,要求编译器识别尾部递归,并且不为其分配堆栈空间。 编辑 我并不是不同意其他的答案,但“无限”尾递归循环是处理外部世界的常用习惯用法。以下示例取自 Real World Haskell 是成语的代表。
我们基本上认为外部世界是 stream . |
|
|
4
0
函数编程中“无限循环”的大多数(如果不是全部)使用都可以用 co-recursion . 到目前为止,其他的答案都指向一般的递归,但是不受限制地使用递归可以说是一种糟糕的方法,因为它可能导致代码的结构不好。 纯函数程序中的绝大多数代码应该写在总子集中,即使用诸如结构递归或共同递归(确保终止和进展)之类的模式,而不是返回到一般递归。希望未来版本的GHC将包括直接支持检测haskell的某些总子集,并发出无法证明终止或进展的代码警告。 |