功能编程 - 标准符号,图表等

时间:2009-05-05 16:13:30

标签: functional-programming uml diagram

我遇到了一个问题,我认为最好通过功能编程方式解决。

来自一个非常迫切的背景,我习惯于程序设计涉及类图/描述,通信图,状态图等。然而,这些图表,所有暗示或用于描述系统的状态和各种行动对系统产生的副作用。

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

谢谢,迈克

4 个答案:

答案 0 :(得分:7)

函数式编程有一个秘密技巧。

  1. 它基本上是无国籍的,所以传统的命令图并不重要。

  2. 大多数普通的花园式数学符号也是无国籍的。

  3. 功能设计更像是代数而不是其他任何东西。您将定义函数,并显示这些函数的组合产生所需的结果。

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

答案 1 :(得分:4)

功能程序员更多的是编写方程式然后编写图表。该游戏被称为等式推理,它主要涉及

  • 将等于等于

  • 应用代数定律

  • 偶尔通过归纳证明

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

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

(append (list x) l)

我会像疯了一样等于等于等于。使用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

并用等于等于等于我得

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

根据另一项法律(if #f e1 e2) == e2,我得到了

(cons x (append '() l))

如果我再次花费附加的定义,我会得到

(cons x l)
我已经证明的

等于

(append (list x) l)

答案 2 :(得分:2)

答案 3 :(得分:-1)

我对功能编程知之甚少,但这里有两件事我已经遇到过

  • λ(lambda)通常用于表示a 功能
  • 用于表示功能 组合物