2017-02-22 57 views
0

Синтаксис list кажется таинственныесписок Ракетки синтаксис кажется несовместимым

«(1 2) и (список 1 2) одинаков:

> (equal? '(1 2) (list 1 2)) 
#t 

НО это не то же самое ???

(equal? '('(1 2)) (list (list 1 2))) 
#f 

также

> (list (list 1 2)) 
'((1 2)) 

> '('(1 2)) 
'('(1 2)) 
+2

Возможный дубликат [В чем разница между цитатой и списком?] (Http://stackoverflow.com/questions/34984552/what-is-the-difference-between-quote-and-list) –

ответ

2

Да, те разные. Ответ здесь заключается в том, что цитата намного мощнее, чем вы думаете.

В частности, цитата помещает вас в «язык данных»; в этом языке данных каждая пара круглых скобок вводит вложенный список, и каждый идентификатор рассматривается как символ.

Так, например,

'(a (b c) d "e" ((g))) 

такое же, как

(list 'a (list 'b 'c) 'd "e" (list (list 'g))) 

Обратите внимание, как значительно короче, первый из них, чем второй.

Когда вы ставите цитируемый термин внутри указанного срока, вы получите сюрпризы; это потому, что 't на самом деле является сокращением для (quote t). Итак, '(' (1 2)) является коротким для (quote ((quote (1 2)))), что совпадает с (list (list 'quote (list 1 2))).

Краткая версия: не указывайте цитату внутри цитаты и помните, что цитата вводится в «язык данных». Все становится еще интереснее с квазиквавтой!

+0

Спасибо, Джон ! – user3200050

 Смежные вопросы

  • Нет связанных вопросов^_^