2017-02-22 17 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))は(list(quote(list 1 2))と同じ)(quote((quote(1 2)))))の略です。

ショートバージョン:見積もりの​​中に見積もりを入れないでください。見積もりに「データ言語」が入力されていることを覚えておいてください。 quasiquoteでもっと楽しいものが得られます!

+0

ありがとうジョン! – user3200050

関連する問題