type: concept status: active confidence: 0.95 created: 2026-04-17 updated: 2026-04-26 last_accessed: 2026-04-26 source_count: 3 tags: [技术, 研究, 计算理论, 社会科学] - 技术 - 研究 - 计算理论 aliases: - Functional Programming - 函数式程序设计 relates_to: - target: "LISP" type: caused_by confidence: 0.99 note: LISP 是历史上第一个函数式编程语言 - target: "John McCarthy" type: caused_by confidence: 0.95 note: 开创者 - target: "λ 演算" type: depends_on confidence: 0.95 note: 理论基础 - target: "John Backus" type: related_to confidence: 0.85 note: 1977年图灵奖演讲提倡函数式编程作为冯诺依曼范式的替代 - target: "FORTRAN" type: compares_to confidence: 0.85 note: FORTRAN 是命令式编程,函数式编程是另一种范式 - target: "Edsger Dijkstra" type: related_to confidence: 0.8 note: 晚年越来越倾向于函数式思维方式 - target: "结构化编程" type: extends confidence: 0.85 note: 函数式编程是比结构化编程走得更远的范式 - target: "丘奇" type: related_to confidence: 0.9 note: λ演算的发明者,为函数式编程提供理论基础 - target: "Church-Turing论题" type: related_to confidence: 0.85 note: λ演算与图灵机等价,为函数式编程提供理论支持 - target: "论可计算数及其在判定问题上的应用" type: theoretical_context confidence: 0.7 note: 图灵证明了λ演算与图灵机的等价性 supersedes: null
函数式编程
概述
函数式编程是一种编程范式,将计算视为数学函数的求值而非状态的改变。LISP(1960)是历史上第一个函数式编程语言,由 John McCarthy 基于 λ 演算设计。
关键内容
核心原则
- 函数是第一等值:函数可以被赋给变量、作为参数传递、作为返回值返回
- 不可变性:数据一旦创建就不能被修改,避免副作用
- 递归替代循环:用递归表达迭代逻辑
- 声明式而非命令式:描述"是什么"而非"怎么做"
LISP 的贡献
McCarthy 在1960年论文中确立的函数式编程核心概念: - 递归函数定义作为首选控制结构 - 条件表达式取代 goto 语句 - λ 表达式和高阶函数 - 程序作为数学函数的组合
语言谱系
从 LISP 出发的函数式语言谱系: - Scheme(1975)— 精简纯化 - ML(1973)和 Haskell(1990)— 静态类型 + 函数式 - Erlang(1986)— 函数式 + 并发 - Clojure(2007)— JVM 上的现代 LISP - JavaScript — 深受 Scheme 影响,支持闭包和高阶函数
现代影响
今天程序员在 JavaScript 中使用 map/filter/reduce、在 Python 中使用 lambda 函数、在 Java 中使用 Stream API 时,都在使用 McCarthy 在1960年确立的思想。
Backus 的图灵奖演讲
John Backus(FORTRAN 之父)在1977年图灵奖演讲《Can Programming Be Liberated from the von Neumann Style?》中批评了命令式编程的根本局限,提出函数式编程作为替代方案,进一步推动了函数式编程运动。
与 Dijkstra 的关系
Edsger Dijkstra 在晚年越来越倾向于函数式的思维方式。从 Dijkstra 的视角来看,函数式编程是他思想的自然延伸——如果 goto 因为破坏可理解性而应该被消除,那么可变状态和不受控制的副作用同样破坏可理解性,也应该被限制。
来源
- raw/books/计算机科学/05-mccarthy-lisp.md
- raw/books/计算机科学/06-dijkstra-goto-considered-harmful.md — Dijkstra 晚年倾向函数式思维
- 01-turing-on-computable-numbers — λ演算与图灵机等价性
相关
- LISP — 第一个函数式语言
- John McCarthy — 开创者
- λ 演算 — 理论基础
- John Backus — 1977年演讲推动函数式编程运动
- FORTRAN — 命令式编程的代表
- 丘奇 — λ演算发明者
- Church-Turing论题 — 理论支持
- 论可计算数及其在判定问题上的应用 — 等价性证明