【问题标题】:Functional programming - standard symbols, diagrams, etc函数式编程——标准符号、图表等
【发布时间】:2010-10-23 23:09:10
【问题描述】:

我有一个问题,我认为最好通过函数式编程来解决。

来自非常必要的背景,我习惯于进行涉及类图/描述、通信图、状态图等的程序设计。然而,这些图都暗示或用于描述系统的状态和各种操作对系统的副作用。

在函数式程序的设计中是否使用了任何标准化的图表或数学符号集,或者这些程序最好用短的函数式伪代码设计(假设函数将比命令式对应物短得多)。

谢谢,迈克

【问题讨论】:

    标签: functional-programming uml diagram


    【解决方案1】:

    函数式编程有一个秘诀。

    1. 它在很大程度上是无状态的,因此传统的命令式图表并不重要。

    2. 大多数普通的普通数学符号也是无状态的。

    功能设计更像是代数。您将定义函数,并证明这些函数的组合会产生所需的结果。

    图表不是必需的,因为函数式编程比过程式编程更简单。它更像是传统的数学符号。使用数学技术来证明你的各种函数做正确的事情。

    【讨论】:

      【解决方案2】:

      函数式程序员更喜欢写方程式而不是写图表。该游戏称为等式推理,主要涉及

      • 用等号代替等号

      • 应用代数定律

      • 偶尔的归纳证明

      我们的想法是,您编写“明显正确”的非常简单的代码,然后使用等式推理将其变成更简洁和/或性能更好的东西。这门艺术的大师是一位名叫理查德伯德的牛津教授。

      例如,如果我想简化 Scheme 表达式

      (append (list x) l)
      

      我会疯狂地用equals代替equals。使用list的定义我得到了

      (append (cons x '()) l)
      

      替换我有的追加正文

      (if (null? (cons x '())) 
          l
          (cons (car (cons x '())) (append (cdr (cons x '())) l)))
      

      现在我有了这些代数定律:

      (null? (cons a b)) == #f
      (car   (cons a b)) == a
      (cdr   (cons a b)) == b
      

      用equals代替我得到的equals

      (if #f
          l
          (cons x (append '() l))
      

      根据另一条法律,(if #f e1 e2) == e2,我明白了

      (cons x (append '() l))
      

      如果我再次扩展 append 的定义,我会得到

      (cons x l)
      

      我已经证明等于

      (append (list x) l)
      

      【讨论】:

        【解决方案3】:

        【讨论】:

          【解决方案4】:

          我对函数式编程了解不多,但是我遇到了两件事

          • λ (lambda) 常用于表示一个 功能
          • f ο g 用于表示功能 作文

          【讨论】:

          • 类型的箭头符号,即:(a --> M b) --> M a --> M b
          • 哇,这个问题太难回答了。 oO
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-03-02
          • 2011-01-19
          • 1970-01-01
          • 1970-01-01
          • 2019-01-23
          • 1970-01-01
          相关资源
          最近更新 更多