在lisp中'((1 2)(3 4))和'('(1 2)'(3 4))之间的区别是什么?

时间:2013-10-05 10:03:58

标签: lisp common-lisp

的长度
(length (car '('(0)'(1 2 3)'(6 7))))

正在展示2同时

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

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

2 个答案:

答案 0 :(得分:7)

引号字符'是一个读者宏。 'anything扩展为(quote anything)。所以第一个表达式是:

的简写
(length (car (quote ((quote (0))
                     (quote (1 2 3))
                     (quote (6 7)))

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

因此该列表的CAR是子列表(quote (0))。它包含2个元素:符号quote和列表(0)

答案 1 :(得分: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)))