Scheme 简介

3,051 阅读3分钟

lambda.png

前言

Scheme 是一门通用的高级计算机程序语言。它被运用于开发文本编辑器、编译器优化、操作系统,图形库,表格应用程序,AI/VR 等等。

它是著名 Lisp 语言的一种方言,语法结构上,跟 Lisp 很像,但与 Lisp 的主要区别是它采用了词法作用域(Lexical Scoping),而非动态作用域(Dynamic Scoping) 。

很多人对 Lisp 的认识可能来自于《黑客与画家》,看这篇文章的读者,想必对 Scheme 有些兴趣,如果不了解 Lisp 有多强,可以读一读这本书的第 12 章,看看作者对 Lisp 的「吹捧」。

Scheme 诞生于 1975 年,是世面上主流编程语言的鼻祖,虽然在编程语言排行榜上,它排名比较落后,但现如今很多高级语言都有它的身影,或者说朝着它靠拢,比如 Python、JavaScript 等。

特点

Scheme 程序具有可移植性,只需在要装有 Scheme 解析器的机器就能够运行。

Scheme 是一门多范式的语言。它的函数是一等公民(first-class),所以可以作为一门函数式的语言使用。同时它也支持命令式。

从语法结构上看上,Scheme 程序由大量的括号组成,看上去像数学公式,与常见的编程语言区别很大。但其实只要掌握了最基本的语法规则,Scheme 程序非常容易看懂,并且因为语法比较单一,也比较容易上手。

最新的 Scheme 的语言标准为 R6RS:www.r6rs.org

解析器

Scheme 存在多种解析器,这些解析器在语法支持上存在细微的差异,但大多数功能都是相同的。如果使用其中某个解释器时,遇到 procedure 找不到,可能是这种解析器不支持的过程。

这里主要介绍三种解析器。

MIT/GNU Scheme

MIT/GNU Scheme 提供 Scheme 程序的解释器和编译器,此外它还支持源码调试,集成类 Emacs 编辑器,以及大量的运行库。 详细的解释可以参考文档

命令行安装方式为:

brew install mit-scheme

安装成功后使用 mit-scheme 命令可进入交互模式。

Ctrl-C 会引导展示帮助界面,Ctrl-D 退出交互。

Racket

Racket 是基于 R5RS 实现的,并在该基础上新增了一些实现,严格来讲它与新版 R6RS 不兼容。虽然它仍然能够运行 R6RS 标准的 Scheme,但在遇到不能解析的过程时,会出现运行时错误。

因此它也自称是一门新的语言:Racket。

详细介绍可以参考文档:racket-lang.org/

Racket 的安装过程非常慢,会关联一系列的工具。安装好后是一个 Application,需要手动配置 racket 环境命令,才能在终端使用。

Chez Scheme

Chez Scheme 是最快的 Scheme 解析器,安装速度也非常快。

执行如下命令安装:

git clone https://github.com/cisco/ChezScheme
cd ChezScheme
./configure
make
sudo make install

Scheme 的交互体验也很不错,建议阅读 Chez Scheme User Guide 第二章前面部分,十分钟左右就能了解基本的使用方法。

后记

笔者试用过这几个,最后选择了 Chez Scheme,它唯一的缺点是使用 scheme file.ss 命令执行结束后,会进入交互状态,如果不希望这样,可以在 file.ss 文件的末尾加以下两行代码:

(newline)
(exit)

配合使用 vim + tmux,一侧展示代码,一侧显示输出结果,体验还是挺不错的:)

以下是王垠提到 Scheme 的相关文章,请参考阅读:

程序语言和它们的工具

Scheme 编程环境的设置

Chez Scheme 的传说

List 已死, Lisp 万岁!