这个世界上,编程语言层出不穷。Lisp语言被称作一个高峰(另一个高峰是c语言)。
那么,Lisp语言最核心的内容是什么?
阅读古老的文献,或者尝试动手写个Lisp的解释器,就会发现,Lisp最核心的内容是λ演算。
Lisp编写的程序具有许多的括号,这些括号表示的是S表达式。λ演算基于S表达式来实现。数学上的λ演算很难阅读,因为常常省略括号,使用某种默认的次序来结合。而阅读基于S表达式的λ演算就容易的多,因为括号多,所以次序看的清楚很多。
实现S表达式,则用满屏的car和cdr,以及cons。
编程语言最核心的东西是分支和循环。这一点从世界上最精简的语言之一BrainFK可以看出来。
原始的Lisp用cond实现分支,用Label配合λ演算实现递归(可以完成循环)。后来人们发现,不用Label,单纯用λ演算就可以实现递归,如著名的Y组合子。cond 可以用更简单的 if 表达式代替。
Lisp中,数据与程序的表示是一致的。可以用quote把程序当成数据;可以用eval把数据当成程序。
空表,表尾,逻辑假都用nil来表示。
判断是否为空,用null函数。
判断是否相等,用eq函数。
在最精简的设计下,完成了分支、S表达式;
在S表达式的方式下,实现了λ演算;
在λ演算的基础上实现了递归;
在递归的基础上完成了全局的eval函数。
某些实现则用eval和apply交互调用,像太极图一样,阴阳消息。
λ演算是Lisp语言的核心。
(指针是c语言的核心。)
(抽象是编程方法的核心。)
网友评论