例子:使用windows API获取windows消息时,通常是循环实现的。
我知道可以创建一个无限期递归的函数。我预计这会导致堆栈溢出。
对于函数式编程来说,无限循环是错误的思维模式吗?
是操作系统接口的问题还是硬件的问题?
在我看来,它不像一个功能性程序/操作系统。可以继续自行运行
我有一点编写函数式程序的经验,但这一直困扰着我。
请分享您对这些问题的想法/见解
正如其他人所发布的,无限循环is可能通过尾递归 http://en.wikipedia.org/wiki/Tail_recursion.
E.g. loop()
将有效地作为无限循环运行(在恒定的堆栈空间中),因为编译器可以优化尾递归调用loop
在最后。
let loop() = do {
println("foo")
loop()
}
But
对于函数式编程来说,无限循环是错误的思维模式吗?
还是有道理的。考虑带有无限循环的 Windows-API 示例。那根本就不是功能性的。请记住 - 功能性意味着思考values (and what他们的意思是)。因此,人们宁愿采用像[伪功能代码]这样的反应式/基于事件的方法
(onClick form1)
|> Event.subscribe (\pt-> do { print $ "I was clicked at " ++ (show pt) })
So
在我看来,它不像一个功能性程序/操作系统。可以继续自行运行
is 技术上错了——你can实现无限循环 - 但这样做通常没有(功能)点。除了某种 IO 轮询之外,为什么还需要它?以纯粹功能性的方式转换价值观应该是有意义的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)