作为功​​能语言的新手(几周前,我开始接触Erlang,这是我能接触到的第一种功能语言)。

我开始写一些小的算法(例如left_rotate_listbubble_sort, merge_sort等)。我发现自己经常迷失在诸如“我应该使用辅助列表存储中间结果吗?”之类的决策中。和“我应该创建一个辅助函数来做到这一点吗?”

过了一会儿,我发现函数式编程(如果我说的根本没有意义,请与我同在)会鼓励“自上而下”的设计:即,当我执行merge_sort时,您首先写下所有的归类排序步骤,并将其命名为个人助手功能;然后您可以一一实现这些帮助器功能(如果需要进一步划分这些帮助器功能,请使用相同的方法进行操作)。

这似乎与OO设计有些矛盾,在该设计中,您可以从底部开始构建基本数据结构,然后将数据结构和算法组装成所需的结构。

感谢您的评论。是的,我想获得有关如何“以函数式语言进行思考”的建议(就像“以Java进行思考”,“以C++进行思考”一样)。

最佳答案



我不确定这是正确的说法。最近,我一直在尝试自学函数式编程,并且发现一种“自下而上”的编程风格确实对我有帮助。要使用您的合并排序示例:

  • 首先看一下基本情况。您如何对0/1个元素的数组进行排序?
  • 接下来,查看基数+ 1,基数+ 2…例。最终,您应该看到一个模式(分解为子问题,解决子问题,组合子解决方案),该模式使您可以编写一般的递归案例而不是最终达到基本案例。
  • 拆分为子问题很容易,但是合并子解决方案则要困难一些。您需要一种将两个排序后的数组合并为一个排序后的数组的方法。
  • 现在将所有内容放在一起。恭喜,您已经编写了归并排序。 :)

  • 我可能会误用该术语,但对我来说,这感觉就像是自下而上的设计。函数式编程与面向对象的编程不同,但是在两者之间进行切换时,您不必完全放弃现有的设计技术。

    关于functional-programming - 有关学习 "How to Think Functional"的建议?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1549017/

    10-13 02:06