关于Lisp的一己之见

Lisp是一种计算机编程语言,由约翰·麦卡锡(John McCarthy)于1958年发明。“Lisp”这个名称是“List Processing”的缩写,具有表处理的意思…以上大概是公认的比较权威的介绍,网络上很多资料大概都是这么讲的。从这些信息中可以看出,Lisp应该是一种和C、Java类似的计算机编程语言,是一种和中文、英文等所谓自然语言不同的、用来给计算机编程的语言,这或许是大部分人对它的印象。然而,在学习Lisp的过程中,感受到了很多与编程语言常识相背的地方,产生了一些感想,本文就表达一些自己对Lisp的一己之见。

1. Lisp语言和方言

如果特指一种语言的话,“Lisp语言”指的应该1958那时John McCarthy发明的那个版本。但是,那个版本的Lisp应该已经停留在书本里了,接下来的几十年里,Lisp快速发展、演变,现代的各种Lisp跟最初的那个版本已经不能称为同一种语言了,只是看上去有点像,都是用包含括号的S-表达式来表示的,但是语言特性和实现已经是天差地别了。那么,现在所说的“Lisp语言”用来指代包含最初的Lisp及其衍生出来的各种方言(例如:Common Lisp,Scheme,Emacs Lisp)在内的一类语言比较合适。

你可能从未听过计算机方言,毕竟没有“C++方言”或者“Java方言”这样的说法,那是因为Java的某一版本明确定义了这个语言这个版本的所有语法,开发者并不能直接修改语法或添加语法。但是,Lisp语言由于提供了扩展词法、语法的功能(例如 Common Lisp 的宏和读取宏),使得Lisp语言的使用者可以给自己手头的Lisp实现添加很多自己想要的语言特性,这样就形成了大量方言,有一些可能连名字都没有。

Common Lisp 和 Scheme 是现在相对主流的两大Lisp方言,各自有着诸多的实现和衍生出来的方言。其余还有 Emacs Lisp、AutoLisp 也仍保持活跃,不过只适合特定环境特定场景,Emacs Lisp 仅用于Emacs编辑器中,而AutoLisp则内嵌于AutoCAD中。还有一些方言用于特定科研领域,在此不多介绍了。

虽说 Common Lisp 和 Scheme 是两大主流Lisp方言,但是并非具体的Lisp实现,仅仅是一种规范,而对应的具体实现也并非只有规范中规定的语言特性和API,通常都包含各自的扩展。下面列出一些常见实现和对应的官方主页(或项目地址)。个人比较推荐 SBCL 和 ChezScheme。

Common Lisp实现

名称 官方主页
Steel Bank Common Lisp (SBCL) http://www.sbcl.org/
GNU CLISP https://clisp.sourceforge.io/
Embeddable Common-Lisp (ECL) https://ecl.common-lisp.dev/
Armed Bear Common Lisp (ABCL) https://www.abcl.org/

Scheme实现

名称 官方主页
Chez Scheme https://scheme.com/ 或 https://cisco.github.io/ChezScheme/
Racket https://www.racket-lang.org/
GNU Guile http://www.gnu.org/software/guile/

2. Lisp的程序

谈论一门编程语言,没有程序示例,讲得再多也会显得空洞抽象。这一节就展示一下Lisp的程序大概是什么样子的。

首先,我们来看几个 hello world 例子:

  • 示例 1. 打印5行helloworld

英语:print 5 lines of "hello world"

Lisp:(print 5 line "hello world")(打印 5 行 "hello world")

  • 示例 2. 字符串"hello world"

英语:the string "hello world"

Lisp:(the string "hello world")#T(字符串 "hello world")

  • 示例 3. John 说:“hello world”

英语:"hello world," John said

Lisp:(say by John "hello world")#P(John say "hello world")(John 说 "hello world")

看到这里,或许有人已经把上面的例子在Lisp实现中试了下,然后遇到了一堆错误。并不是我捉弄大家,上面那些确实可以作为Lisp语言的程序,不过缺少对应宏或操作符的实现。好了,言归正传,下面附上能运行几个简单示

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值