list
的语法似乎很神秘
'(1 2)和(list 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))
答案 0 :(得分:2)
具体来说,引用会让您进入"数据语言&#34 ;;在这种数据语言中,每对括号都引入了一个嵌套列表,每个标识符都被视为一个符号。
所以,例如,
'(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使事情变得更加有趣!