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'! "

添加注释

分号符号 (;) 用于指示注释行。

例如:

main.lisp

(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-表达式。

  • 求值器定义 Lisp 表达式的语法,这些表达式由 s-表达式构成。此第二级求值定义了一个语法,用于确定哪些 s-表达式是 LISP 表达式。

现在,LISP 表达式可以是:

  • 原子

  • 空列表或非列表

  • 任何以符号作为其第一个元素的列表

求值器作为一个函数工作,它接受一个有效的 LISP 表达式作为参数并返回一个值。这就是我们将LISP 表达式放在括号中的原因,因为我们将整个表达式/形式作为参数发送给求值器。

LISP 中的命名约定

名称或符号可以包含任意数量的字母数字字符,但不能包含空格、开括号和闭括号、双引号和单引号、反斜杠、逗号、冒号、分号和竖线。要在名称中使用这些字符,需要使用转义字符 (\)。

名称可以包含数字,但不能完全由数字组成,因为那样它将被读取为数字。类似地,名称可以包含句点,但不能完全由句点组成。

单引号的使用

LISP 会评估所有内容,包括函数参数和列表成员。

有时,我们需要按字面意思取原子或列表,并且不希望将其评估或视为函数调用。

为此,我们需要在原子或列表前加上单引号。

以下示例演示了这一点。

创建一个名为 main.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
广告