11.6 Clojure:Lisp的现代复兴

Clojure由里奇·希基(Rich Hickey)于2007年发布,是Lisp在JVM上的现代实现。它强调不可变数据、函数式编程和软件事务内存(STM)。

clojure
复制代码
;; Clojure代码示例

;; 定义函数
(defn fib [n]
  (cond
    (= n 0) 0
    (= n 1) 1
    :else (+ (fib (- n 1)) (fib (- n 2)))))

;; 使用惰性序列
(def fibonacci-sequence
  (map first (iterate (fn [[a b]] [b (+ a b)]) [0 1])))

;; 使用数据结构(不可变)
(def users [{:name "Alice" :age 30}
            {:name "Bob" :age 25}
            {:name "Charlie" :age 35}])

;; 使用线程宏进行函数组合
(def adults
  (->> users
       (filter #(>= (:age %) 18))
       (map :name)))

;; 使用atom进行状态管理
(def counter (atom 0))

(defn increment! []
  (swap! counter inc))

;; 使用STM处理并发
(def account-a (ref 100))
(def account-b (ref 50))

(defn transfer [from to amount]
  (dosync
    (alter from - amount)
    (alter to + amount)))

Clojure的特点:

  • Lisp语法:代码即数据(同像性),支持强大的宏
  • 不可变数据:所有核心数据结构都是不可变的
  • 软件事务内存:创新的并发控制机制
  • REPL驱动开发:交互式开发体验