设计大型功能程序的方法

时间:2011-09-02 00:45:26

标签: f# functional-programming

我一直在阅读很多关于函数式语言的文章,并希望在F#中重写我的应用程序的某些部分。从外面或外面设计是否更好?

5 个答案:

答案 0 :(得分:5)

约翰·休斯关于FP Why Functional Programming Matters主题的一部作品可以被视为直接答案:

  

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

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

答案 1 :(得分:4)

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

答案 2 :(得分:3)

我在这个问题上根本不是专家,但这里有一篇关于这个主题的文章的链接,由'我们'自己的Brian

How does functional programming affect the structure of your code?

来自SO& S的一些问题程序员(顺便说一下 - 我怀疑这个问题会更合适)

答案 3 :(得分:2)

不确定我理解“inside out”/“outside in”的含义,但FP在“小”中最有用 - 在功能级别。面向对象可能仍然是组织大型项目的最佳方式。最简单的方法是处理与您的业务领域相关的对象。

答案 4 :(得分:1)

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

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

  • 数据结构:您的应用程序需要处理的所有数据和 哪种数据结构最适合表示该数据。
  • 功能:一个功能做一件事(并正确地做)。
  • 构图:通过使用高阶函数和合成等技术组合其他函数,创建实现目标的新函数。
  • 其他更多先进和抽象的FP技术,如Monads等。

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

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