Lisp列表类型
目录

所有合法的列表形式均以一个符号开始,但是有三种类型的列表形式,它们会以三种不同的方式进行求值。

  • 当开始符号是一个函数时,对应的形式就是函数调用形式(function call form);
  • 当开始符号是一个宏时,对应的形式就是宏形式(macro form);
  • 当开始符号是一个特殊操作符时,对应的形式就是特殊形式(special form);

1. 函数

函数使用defun宏来定义,基本结构如下:

(defun name (parameter*)
"Optional documentation string."
body-form*)

parameter*是函数的行参列表。Lisp行参有以下几种类型:

  • 必要行参
  • 可选行参
  • 剩余行参
  • 关键字行参

body-form*是任意数量的Lisp表达式,最后一个表达式的值将被作为整个函数的值返回。

2. 变量

  • 词法绑定:对应词法作用域或称静态作用域
  • 动态绑定:对应动态作用域

定义一个新变量可以使用let特殊操作符,基本结构如下:

(let (variable*)
body-form*)

如以下程序将创建x=10, y=20, z=NIL,并执行...内容:

(let ((x 10) (y 20) z)
...)

...执行完毕后,x, y, z将重新引用到它们初始的值。

另一个变体是let*,它可以在定义部分引用到之前定义的变量。

发表评论