2

的长度

(length (car '('(0)'(1 2 3)'(6 7))))

正在显示 2 而相同

(length (car '((0)(1 2 3)(6 7))))

正确显示 1. 那么第一个表达式实际上代表什么?

4

2 回答 2

7

引号字符'是一个阅读器宏。'anything扩展为(quote anything). 所以第一个表达式是以下的简写:

(length (car (quote ((quote (0))
                     (quote (1 2 3))
                     (quote (6 7)))

第一个quote导致参数被逐字处理。这意味着其中的quote表达式只是恰好以符号开头的列表quote

所以该列表的 CAR 是 sub-list (quote (0))。它包含 2 个元素:符号quote和列表(0)

于 2013-10-05T10:13:12.060 回答
1
CL-USER 8 > '((0)(1 2 3)(6 7))
((0)
 (1 2 3)
 (6 7))

CL-USER 9 > '('(0)'(1 2 3)'(6 7))
((QUOTE (0))
 (QUOTE (1 2 3))
 (QUOTE (6 7)))
于 2013-10-05T11:50:57.293 回答