2017-02-22 44 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实际上是(报价t)的简写。因此'('(1 2))是(quote((quote(1 2))))的简写,与(list(list'quote(list 1 2)))相同。

短版:不要把报价报价内,记住报价进入“数据语言”。 quasiquote让事情变得更有趣!

+0

谢谢你约翰! – user3200050