2
的lisp中'((1 2)(3 4))和'('(1 2)'(3 4))之間的區別是什麼?
(length (car '('(0)'(1 2 3)'(6 7))))
長度正在顯示2,而相同
(length (car '((0)(1 2 3)(6 7))))
正確1所示。所以什麼的第一個表達式實際上表示?
的lisp中'((1 2)(3 4))和'('(1 2)'(3 4))之間的區別是什麼?
(length (car '('(0)'(1 2 3)'(6 7))))
長度正在顯示2,而相同
(length (car '((0)(1 2 3)(6 7))))
正確1所示。所以什麼的第一個表達式實際上表示?
引用字符'
是一個閱讀器宏。 'anything
擴展爲(quote anything)
。因此,第一個表達式是簡寫:
(length (car (quote ((quote (0))
(quote (1 2 3))
(quote (6 7)))
第一quote
導致要字面上處理的參數。這意味着它內部的quote
表達式僅僅是以符號quote
開頭的列表。
所以該列表的CAR是子列表(quote (0))
。它包含2個元素:符號quote
和列表(0)
。
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)))
[這個問題](http://stackoverflow.com/q/18697105/1281433)並不是要求完全相同的事情,但其答案確實回答了這個問題。 –