【问题标题】:Approach to designing large functional programs设计大型功能程序的方法
【发布时间】:2011-11-08 20:13:48
【问题描述】:

我一直在阅读有关函数式语言的大量内容,并且想尝试用 F# 重写我的应用程序的某些部分。由外向内设计好还是由内向外设计好?

【问题讨论】:

  • 你能解释一下“由内而外”/“由外而内”是什么意思吗?
  • 自上而下与自下而上的设计可能是另一种说法,回想起来可能更常见1 :) 抱歉。

标签: f# functional-programming


【解决方案1】:

John Hughes 对 FP Why Functional Programming Matters 的主题有影响的作品之一可以直接回答:

我们分解的能力 将问题分解成部分直接取决于我们粘合解决方案的能力 一起。为了支持模块化编程,一种语言必须提供良好的 胶水。函数式编程语言提供了两种新的粘合剂—— 高阶函数和惰性求值。使用这些胶水可以模块化 以新的和有用的方式编写程序,我们已经展示了几个例子。 更小、更通用的模块可以更广泛地重用,简化后续工作 编程。这就解释了为什么函数式程序要小得多并且 比传统的更容易编写。它还提供了一个功能目标 程序员的目标。如果程序的任何部分混乱或复杂, 程序员应该尝试将其模块化并概括各个部分。他或 她应该期望使用高阶函数和惰性求值作为工具 这样做。

我还建议查看contemporary interview with John Hughes in InfoQ

【讨论】:

    【解决方案2】:

    真正帮助我了解函数式编程的一篇文章是:
    http://prog21.dadgum.com/23.html
    这是一个关于如何使用函数式编程技术创建 Pac-Man 克隆的教程。我什至不认识他使用的语言(可能是 Erlang),但这种解释帮助我理解了我在用 Scheme 重写我的一个程序时使用的正确思维方式。

    【讨论】:

      【解决方案3】:

      我根本不是这个主题的专家,但这里有一篇关于这个主题的文章的链接,作者是“我们的”Brian

      How does functional programming affect the structure of your code?

      还有来自 SO & Programmers 的一些问题(顺便提一下,我怀疑这个问题会更合适)

      【讨论】:

      • 谢谢你,非常感谢我正在寻找的东西!
      【解决方案4】:

      不确定我是否理解“由内而外”/“由内而外”的含义,但 FP 在“小”方面最有用——在功能级别。 OO 可能仍然是组织大型项目的最佳方式。处理与您的业务领域相关的对象是最容易的。

      【讨论】:

      • 那么你是说一个纯粹功能性的大型系统是不可取的吗?像 F# 或 Scala 这样可以与常规面向对象语言交互的函数式语言可能是更好的选择?
      【解决方案5】:

      我猜从外向内是指从上到下的方法,从内向外是指从下到上。如果这就是你的意思,那么 FP 更适合自下而上的方法,即由内而外。

      在设计 FP 程序时,请考虑使用以下方法解决问题:

      • 数据结构:您的应用程序需要处理的所有数据以及 哪种数据结构最适合表示该数据。
      • 函数:函数只做一件事(并且做得正确)。
      • 组合:创建新函数,通过使用高阶函数和组合等技术组合其他函数来实现其目标。
      • 其他更高级和抽象的 FP 技术,如 Monad 等。

      所以基本上你从底部开始,为每个原子问题编写一个函数,然后随着你在设计中向上移动,你使用这些原子函数通过组合创建更高级别的函数。

      请记住,始终考虑使用抽象和这些抽象的组合来解决问题,而不是像在命令式编程中那样按顺序思考。

      【讨论】:

        猜你喜欢
        • 2011-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-13
        • 1970-01-01
        • 1970-01-01
        • 2010-11-02
        • 1970-01-01
        相关资源
        最近更新 更多