LISP - 基本语法
LISP 中的基本构建块
LISP 程序由三个基本构建块组成 −
原子
列表
字符串
原子是连续字符的数字或字符串。 它包括数字和特殊字符。
以下是一些有效原子的示例 −
hello-from-tutorials-point name 123008907 *hello* Block#221 abc123
列表是一系列原子和(或)括在括号中的其他列表。
以下是一些有效列表的示例 −
( i am a list) (a ( a b c) d e fgh) (father tom ( susan bill joe)) (sun mon tue wed thur fri sat) ( )
字符串是一组用双引号括起来的字符。
以下是一些有效字符串的示例 −
" I am a string" "a ba c d efg #$%^&!" "Please enter the following details :" "Hello from 'Tutorials Point'! "
添加注释
分号(;)用于指示注释行。
例如,
(write-line "Hello World") ; greet the world ; tell them your whereabouts (write-line "I am at 'Tutorials Point'! Learning LISP")
当你点击执行按钮,或者输入Ctrl+E,LISP立即执行,返回结果为 −
Hello World I am at 'Tutorials Point'! Learning LISP
继续下一步之前的一些值得注意的点
以下是一些需要注意的要点 −
LISP 中的基本数字运算是 +、-、* 和 /
LISP 将函数调用 f(x) 表示为 (f x),例如 cos(45) 写为 cos 45
LISP 表达式不区分大小写,cos 45 或 COS 45 相同。
LISP 尝试计算所有内容,包括函数的参数。 只有三种类型的元素是常量并且总是返回它们自己的值
数字
字母t,代表逻辑真。
值nil,代表逻辑假,以及一个空列表。
关于 LISP 表单的更多信息
在上一章中,我们提到LISP代码的求值过程分为以下步骤。
阅读器将字符串翻译为 LISP 对象或 s 表达式。
求值器定义了从 s 表达式构建的 Lisp 形式的语法。 第二级求值定义了一种语法,用于确定哪些 s 表达式是 LISP 形式。
现在,LISP 表单就可以了。
一个原子
空列表或非列表
任何以符号作为第一个元素的列表
求值器作为一个函数,采用有效的 LISP 形式作为参数并返回一个值。 这就是为什么我们将 LISP 表达式放在括号中的原因,因为我们将整个表达式/表单作为参数发送给求值器。
LISP 中的命名约定
名称或符号可以包含除空格、左括号和右括号、双引号和单引号、反斜杠、逗号、冒号、分号和竖线之外的任意数量的字母数字字符。 要在名称中使用这些字符,您需要使用转义字符 (\)。
名称可以有数字,但不能完全由数字组成,因为这样它就会被读作数字。 同样,名称可以包含句点,但不能完全由句点组成。
使用单引号
LISP 计算所有内容,包括函数参数和列表成员。
有时,我们需要按字面意思理解原子或列表,并且不希望将它们计算或视为函数调用。
为此,我们需要在原子或列表前面加上单引号。
以下示例演示了这一点。
创建一个名为 main.lisp 的文件并在其中键入以下代码。
(write-line "single quote used, it inhibits evaluation") (write '(* 2 3)) (write-line " ") (write-line "single quote not used, so expression evaluated") (write (* 2 3))
当你点击执行按钮,或者输入Ctrl+E,LISP立即执行,返回结果为 −
single quote used, it inhibits evaluation (* 2 3) single quote not used, so expression evaluated 6