sym*_*ont 8 recursion loops functional-programming
示例:当使用Windows API获取Windows消息时,通常在循环中实现.
我知道有可能创建一个将无限期地进入递归的函数.我希望这会导致堆栈溢出.
无限循环错误的功能编程思维定势?
是操作系统的接口还是硬件的问题?
在我看来,功能程序/操作系统似乎不能单独运行
我在编写功能程序方面有一点经验,但这一直困扰着我.请分享您对这些问题的想法/见解
如果使用尾递归,则实际上有一个迭代,就像for/while循环一样.因此,我猜你可以有一个无限循环而不会出现堆栈溢出.
对于你的问题:"无限循环错误的功能编程心态?" 也许这会有所帮助: - 在F#中使用或Tail Recursion,什么时候使用?
正如其他人所发布的,通过尾递归可以实现无限循环。
例如,将有效地作为无限循环运行(在恒定的堆栈空间中),因为编译器可以优化最后的loop()尾递归调用。loop
let loop() = do {
println("foo")
loop()
}
Run Code Online (Sandbox Code Playgroud)
但
对于函数式编程来说,无限循环是错误的思维模式吗?
还是有道理的。考虑带有无限循环的 Windows-API 示例。那根本就不是功能性的。请记住 - 功能性意味着思考价值观(及其含义)。因此,人们宁愿采用像[伪功能代码]这样的反应式/基于事件的方法
(onClick form1)
|> Event.subscribe (\pt-> do { print $ "I was clicked at " ++ (show pt) })
Run Code Online (Sandbox Code Playgroud)
所以
在我看来,功能性程序/操作系统无法自行继续运行
从技术上讲是错误的 - 您可以实现无限循环 - 但这样做通常没有(功能)点。除了某种 IO 轮询之外,为什么还需要它?以纯粹功能性的方式转换价值观应该是有意义的。