2013-10-05 2 views
2

ДлинаКакая разница между '((1 2) (3 4)) и' ('(1 2)' (3 4)) в lisp?

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

в настоящее время показывают 2, а то же

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

правильно показано 1. Так, что первое выражение на самом деле представляют?

+1

[Этот вопрос] (http://stackoverflow.com/q/18697105/1281433) не спрашивает точно то же самое, но его ответы отвечают на этот вопрос. –

ответ

7

Символ цитаты ' - это макрос читателя. 'anything раскрывается в (quote anything). Таким образом, первое выражение представляет собой сокращенное:

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

Первый quote вызывает параметр следует рассматривать в буквальном смысле. Это означает, что выражения quote внутри него - это просто списки, которые начинаются с символа quote.

Таким образом, ЦАР этого списка является подкатегорием (quote (0)). Он содержит 2 элемента: символ quote и список (0).

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))) 
Смежные вопросы