LISP - 基本语法


LISP 中的基本构建块

LISP 程序由三个基本构建块组成 -

  • Atomics

  • 列表

  • 细绳

Atomics是连续字符的数字或字符串。它包括数字和特殊字符。

以下是一些有效Atomics的示例 -

hello-from-tutorials-point
name
123008907
*hello*
Block#221
abc123

列表是一系列Atomics和/或括在括号中的其他列表

以下是一些有效列表的示例 -

( 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) 表示为 (fx),例如 cos(45) 写为 cos 45

  • LISP 表达式不区分大小写,cos 45 或 COS 45 相同。

  • LISP 尝试评估所有内容,包括函数的参数。只有三种类型的元素是常量并且总是返回它们自己的值

    • 数字

    • 字母t,代表逻辑真。

    • nil,代表逻辑 false,以及空列表。

关于 LISP 表单的更多信息

在上一章中,我们提到LISP代码的求值过程分为以下步骤。

  • 阅读器将字符串转换为 LISP 对象或s 表达式。

  • 求值器定义了从 s 表达式构建的Lisp形式的语法。第二级求值定义了一种语法,用于确定哪些 s 表达式是 LISP 形式。

现在,LISP 表单就可以了。

  • 一个Atomics

  • 空列表或非列表

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

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

LISP 中的命名约定

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

名称可以有数字,但不能完全由数字组成,因为这样它就会被读作数字。同样,名称可以包含句点,但不能完全由句点组成。

单引号的使用

LISP 计算所有内容,包括函数参数和列表成员。

有时,我们需要按字面意思理解Atomics或列表,并且不希望将它们计算或视为函数调用。

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

以下示例演示了这一点。

创建一个名为 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