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