CWCL 0.0:Lisp是什么

2 篇文章 0 订阅

CWCL 0.0:Lisp是什么

我们通常所说的Lisp是一种计算机编程语言,由约翰·麦卡锡(John McCarthy)于1958年提出。而Lisp名称是List Processing的缩写,具有表处理的意思…以上大概是公认的比较权威的介绍,网络上很多资料大概都是这么讲的。从这些信息中可以看出,Lisp应该是一种和C、Java类似的计算机编程语言,是一种和中文英文等所谓自然语言不同的、用来给计算机编程的语言,这或许是大部分计算机相关工作者和不懂计算机的普通用户的感觉。笔者在学习Lisp的过程中,感受到了很多与其他语言的所谓常识不同的地方,本文就围绕这些特殊性来介绍Lisp。

本文及后续文章讲述的内容主要以 Common Lisp 为主,也会提及 Emacs Lisp、Scheme 等其他Lisp方言。如果没有明确说明,本文中的Lisp指的都是包含 Scheme 和 Common Lisp 等方言在内的广义的Lisp。

准备工作:获取Lisp

  • clisp:
    fedora:sudo dnf install clisp
    ubuntu:sudo apt install clisp
    win10:使用cygwin,在安装软件包的时候选择clisp

  • sbcl:
    fedora:sudo dnf install sbcl
    ubuntu:sudo apt install sbcl
    win10:使用cygwin,在安装软件包的时候选择sbcl

  • guile:
    fedora:sudo dnf install guile22
    ubuntu:sudo apt install guile-3.0

  • chezscheme:
    fedora:自行编译
    ubuntu:sudo apt install chezscheme

Lisp作为语言

通常所说的Lisp指的是Lisp语言,还包括其他Lisp方言(例如:Common Lisp,Scheme,Clojure)。你可能从未听过计算机方言,毕竟没有Python方言或者说Java方言的说法。Lisp的语法是可扩展的,有着动态性极强的宏机制,因此Lisp语言可以自我扩展,甚至在运行时扩展语法,诞生新的语言。另外,Lisp语言编写的代码由表(list)组成(例如,(+ 1 2 3 4),表示对1、2、3、4求和),而表又是Lisp语言中的基本结构之一(例如,'(+ 1 2 3 4)(list '+ '1 '2 '3 '4),表示包含+、1、2、3、4五个元素的表),因此使用Lisp语言操纵修改Lisp语言编写的代码十分地便捷,生成Lisp代码也很简单(例如,(setf (first '(+ 1 2 3 4)) '-),把表中的第一个元素’+‘换成’-’,程序就从累加变成了累贱)。正因为Lisp语言中数据和代码的高度一致性,写Lisp的人很多都能自己实现Lisp的解释器和编译器。

Lisp的实现

语言的使用必然涉及语言的实现形式,例如,C语言可以使用GCC编译器编译为对应平台机器码执行,python语言可以由python解释器来解释执行,而Java语言可以通过java编译器编译为Java字节码然后由Java虚拟机解释执行。那么Lisp语言是如何被使用的呢?事实上,好像Lisp语言的使用形式包含了计算机语言的所有形式,clisp、guile等大部分实现可以在命令行以repl交互式的形式使用,而sbcl和chezscheme可以将Lisp编译成机器码来执行,ECL可以嵌入到其他语言中,clisp可以把代码编译成clisp的字节码然后直接解释字节码,等等。

和大部分使用软件实现的语言不同,在20世纪80年代还有用来直接执行Lisp的硬件设备-Lisp机器。那是一种在硬件上实现Lisp程序的解释器的机器,在那个年代曾风靡一时,现在可能只能在博物馆里看到了。

一些思考

“语言是由词汇按一定的语法所构成的语音表义系统”,这是语言的一种解释,我们通常认为一种语言它有着固定的语法,但是Lisp并没有固定的语法,或者它的固定语法太基础了(就是(xxx xx xxx)这样),而且还是可扩展的,那么这还是语言吗?其实,在学习过程中,一直都有这个疑惑。跟其他计算机语言相比,Lisp更像是语法树,但又不仅仅是语法树,因为它可以有着非常高级的语法;而跟中文、英文等自然语言相比,它的语法又显得多变。

虽然标题是“Lisp是什么”,但是本文却没法给出权威明确的解答。在学习过程中愈发感觉这不只是一门计算机编程语言那么表面、纯粹的东西,它的潜力可能超过现在已经表现出来的。在使用一段时间后,注意力也从这个问题转移到了“Lisp还可以是什么”或者“Lisp还可以成为什么”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值