在编程语言的世界里,Lisp是一个特殊的存在。它诞生于1958年,比C语言还早十四年,却至今仍活跃在人工智能、符号计算、领域特定语言等领域。然而,对于每一位踏上Lisp学习之路的新手而言,第一个问题往往不是“如何写Lisp”,而是“哪一个Lisp?”这正是标题“A Road to Lisp: Which Lisp”所揭示的核心困境——在这条通往“元语言”的道路上,岔路之多,足以让初学者望而却步。

为什么会有“哪个Lisp”的问题?

Lisp并非单一语言,而是一个语言家族。与Python、Java那种“官方实现”统治的局面不同,Lisp的核心理念——代码即数据、宏系统、交互式开发——催生了众多方言。每一个方言都继承Lisp的灵魂,又在语法、社区、目标平台上做出不同取舍。这种多样性曾是Lisp的骄傲,却也成了新人的第一道坎。

主流Lisp方言:一张全景图

如果你在网上搜索“学习Lisp”,最常见的三支分裂是:Common LispSchemeClojure。它们各自代表了Lisp哲学的不同面向。

Common Lisp——Lisp界的“重装坦克”。它是1980年代为统一众多商业Lisp而生的ANSI标准,拥有庞大的函数库(HyperSpec)、强大的条件系统(条件重启)、以及几乎“什么都能干”的多范式设计。它对初学者最友好的地方在于实用主义:你不需要理解高阶函数就能写出能跑的程序,因为Common Lisp编译器的“傻瓜式”设计允许渐进式学习。比如你想做一个web应用,可以选Hunchentoot或Caveman框架,很快就能看到结果。但缺陷也很明显:体量庞大,学习曲线陡峭。

Scheme——极简主义的“学术派”。它由麻省理工学院的Gerald Sussman和Guy Steele在1975年发明。Scheme追求最小核心和优雅理论,是著名的《计算机程序的构造与解释》(SICP)的教学语言。Scheme社区倾向于函数式编程、递归与延续(continuations)。如果你希望深入理解计算本质,Scheme是绝佳选择。但它的轻量化也意味着“自带东西少”,做实际工程往往需要自己搭轮子。目前主流实现有Chez Scheme、Chibi Scheme和Racket(一个融合了Scheme理念的语言平台)。

Clojure——现代JVM上的“混血儿”。由Rich Hickey在2007年创建,它跑在Java虚拟机(JVM)上,并且吸收了函数式编程、持久化数据结构、软件事务内存等现代概念。Clojure的独特之处在于它优雅地解决了Lisp的传统痛点——并发编程和库生态。你可以无缝调用Java的庞大生态系统,这让它成为目前实际生产环境中用得最多的Lisp之一。如果你有Java背景,或者想用Lisp做后端开发、数据处理、ClojureScript做前端,Clojure几乎是首选。但它不是纯正的“经典Lisp”——其语法做了改动(如[]代表向量,{}代表哈希映射),这让一些Lisp老手感到疏离。

此外还有Emacs Lisp(编辑器的灵魂,用于扩展和定制)、ISLisp(ANSI简化版)、Hy(基于Python的Lisp方言)、Fennel(基于Lua的Lisp)……这条路越走越宽。

如何选择?三个维度决定方向

面对这些选择,我在采访多位Lisp开发者后,归纳出三个核心判断维度:

  1. 学习目的:如果你想理解编程语言设计、计算本质,选Scheme(读SICP);如果你想快速上手做实际项目,选Common Lisp或Clojure;如果你想定制Emacs编辑器,那没得选——Emacs Lisp。
  2. 已有环境:如果你在Java或安卓生态中,Clojure能让你的Java技能无缝转移到函数式世界;如果你在Linux的“命令行天堂”,Common Lisp的SBCL编译器可以给你极致的REPL(交互式编程环境)体验。
  3. 社区偏好:Scheme社区偏教育研究;Common Lisp社区偏老派但热情(有著名的lisp-lang.org社区);Clojure社区年轻活跃,Stack Overflow和ClojureScript生态都很完善。

一条实用的“入学路径”

我询问了一位从事Lisp教学超过十年的专家,他给出了一条被证明有效的路径: 1. 先不要买书,不必下载IDE。 2. 打开浏览器,访问Portacle(一个整合好的Common Lisp环境)或Try Clojure(在线交互式教程)。 3. 花一个小时,写出“Hello World”并理解(defun hello (name) (format t "Hello, ~a!" name))中的“代码与数据不分家”的感觉。 4. 第二周,学习宏(macro)——那是Lisp区别于所有其他语言的核心武器。 5. 第三周,尝试写一个小的领域特定语言(DSL),比如一个简单的逻辑推理机。到这一步,你就真正进入Lisp的世界了。

结语:选对一条路,不如启动脚步

理论上讲,每一种Lisp方言都能带你到达同一个哲学终点:用代码生成代码。正如《Let Over Lambda》作者Doug Hoyte所言:“Lisp不是一门语言,它是一种发现。”在“Which Lisp”的迷宫中,最大的误区是试图在岸边比较所有船只的航速,却从不登船。选一个最顺眼的上手:Common Lisp的实用、Scheme的纯粹、Clojure的现代性,都只是“通向Lisp之路”上的不同风景。

今天,当你面对Google、Facebook内部仍在使用的Lisp闭门器,或是看到Clojure在数据科学中的崛起,应该明白:哪个Lisp不重要,重要的是——你已经开始走在这条路上。