Functional programming 功能编程-标准符号、图表等

Functional programming 功能编程-标准符号、图表等,functional-programming,uml,diagram,Functional Programming,Uml,Diagram,我有一个问题,我认为最好通过函数式编程来解决 来自一个非常重要的背景,我习惯于涉及类图/描述、通信图、状态图等的程序设计。然而,这些图都暗示或用于描述系统的状态以及操作对系统的各种副作用 功能程序的设计中是否使用了任何标准化的图表或数学符号集,或者这些程序是否最好用简短的功能伪代码设计(假设函数比命令式程序短得多) 谢谢,迈克,函数式编程有一个秘密诀窍 它在很大程度上是无状态的,因此传统的命令式图表并不重要 大多数普通的花园式数学符号也是无状态的 功能设计更像是代数而不是其他任何东西。您将定义函

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

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

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


谢谢,迈克,函数式编程有一个秘密诀窍

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

  • 大多数普通的花园式数学符号也是无状态的

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


    因为函数式编程比过程式编程要简单一些,所以图表不是必需的。它更像是传统的数学符号。使用数学技巧来证明您的各种函数都做了正确的事情。

    我对函数编程了解不多,但这里有两件事我遇到过

    • λ(λ)通常用于表示a 作用
    • fοg用于表示功能 构图

    函数式程序员更喜欢写方程式,而不是写图表。这个游戏叫做等式推理,它主要涉及

    • 用相等代替相等

    • 应用代数定律

    • 归纳法的偶然证明

    我们的想法是,您编写真正简单的“明显正确”的代码,然后使用等式推理将其转换为更干净和/或性能更好的代码。这门艺术的大师是牛津大学的理查德·伯德教授

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

    (append (list x) l)
    
    我会疯狂地用平等代替平等。使用
    列表的定义
    我得到

    (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))
    
    根据另一个定律,
    (如果#f e1 e2)=e2,我得到

    (cons x (append '() l))
    
    如果我再次扩展append的定义,我得到

    (cons x l)
    
    我已经证明了这一点

    (append (list x) l)
    
    • 有一篇很好的文章介绍了使用动画的Lambda演算:
    • 此版本与前一版本非常相似,但有一个实际实现:

    类型的箭头表示法,即:(
    a-->M
    b)-->M
    a-->M
    b如何,很难回答这个问题。面向对象