例子:使用windows API获取windows消息时,通常是循环实现的。
我知道可以创建一个无限期地继续递归的函数。我希望这会导致堆栈溢出。
在我看来,它不像一个功能程序/o.s。可以自行运行
我有一点编写函数式程序的经验,但这一直困扰着我。
请分享您对这些问题的想法/见解
最佳答案
正如其他人所发布的,通过 tail recursions 可以实现无限循环.
例如。 loop()
由于编译器可以优化 loop
的尾递归调用,因此将有效地作为无限循环运行(在恒定堆栈空间中)在末尾。
let loop() = do {
println("foo")
loop()
}
但are infinite loop the wrong mind-set for functional programming ?
还是有道理的。考虑带有无限循环的 Windows-API 示例。那不是功能性的。请记住——功能性意味着思考值(value)观(以及它们的含义)。因此,人们宁愿采用类似 [Pseudo-functional code] 的响应式(Reactive)/基于事件的方法
(onClick form1)
|> Event.subscribe (\pt-> do { print $ "I was clicked at " ++ (show pt) })
所以it doesn't seem to me like a functional program/o.s. could keep running by itself
在技术上是错误的——你可以实现无限循环——但这样做通常没有(功能)点。为什么除了某种 IO 轮询之外还需要它?以纯粹的功能方式转换值应该终止才有意义。
关于loops - 函数式编程中的无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3483895/