Clojure 精要:从不可变数据到协议,一张学习地图
来源:yogthos.net — 2026-11
📋 概述
yogthos 的 Clojure 入门长文,开篇就点明:Clojure 的难点不在语法(语法极简),而在于必须换一套解题方法。作者先给三个理由:不可变数据结构靠结构共享,让「每次改动等于复制」只付与改动等量的代价,从而可以孤立地推理局部代码;函数与数据分离,列表/向量/映射/集合只有一套通用操作,函数因此成为真正的复用单元,迭代器函数把边界与终止条件封装一次;纯函数加不可变共享状态让并行变简单,map 换 pmap 即可,STM 也只需要为写加锁。随后进入实践:集合字面量、特殊形式、fn 与 #() 匿名函数、defn、高阶函数、闭包、-> 线程化表达式、惰性序列、解构、命名空间、dynamic vars、多方法与协议,最后是 REPL 与 Java 互操作。
🔑 核心要点
- 不可变结构每次改动生成新版本,只付与改动量成正比的代价,等价于廉价的全量拷贝。
- 代码即数据:逻辑用同一套数据结构书写,所以任何代码都能被当数据操作。
- 单遍编译意味着函数必须先声明,需要前向引用就用 declare 宏。
- 函数体只返回最后一个表达式的值,中间表达式只能用于副作用。
- 并行只需把 map 换成 pmap,因为纯函数不依赖外部状态。
- 多方法与协议提供了按类型或任意谓词分派的多态,而不必把数据绑进类。
💡 金句
在 Clojure 里,代码就是数据,数据就是代码。
👍 0
👎 0
← 返回 Lobsters 首页