loops - 函数式编程中的无限循环?

标签 loops recursion functional-programming

  • 我想知道:可以在函数式编程中完成无限循环吗?

  • 例子:使用windows API获取windows消息时,通常是循环实现的。

    我知道可以创建一个无限期地继续递归的函数。我希望这会导致堆栈溢出。
  • 无限循环是函数式编程的错误思维方式吗?
  • 是操作系统的接口(interface)还是硬件的问题?

  • 在我看来,它不像一个功能程序/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/

    相关文章:

    javascript - 在 Javascript 中迭代 Java 列表?

    c# - 递归函数的顺序编号?例如2, 2.1, 2.1.1, 2.2, 2.2.1

    sql - 如何在 SQL 中定义替换模式?

    java - Vavr 中列表上的模式匹配对象分解

    python - 是否有一种优雅的 Pythonic 方式来计算处理后的数据?

    php - Wordpress 发布缩略图问题(首页上只有 1 个缩略图)

    javascript - 如何在 JavaScript 循环中提醒一次

    json - 将 Typescript 接口(interface)与递归 JSON 结合使用

    c - 递归函数的内联

    scala - Scala 中 2 个集合的叉积