2016-07-21 8 views
0

私はClojureでリスト内のリストを宣言しようとしていました。リスト宣言内のClojureリスト

Expected behavior: `(`()) => (()) 
Actual behavior: `(`()) => ((clojure.core/list)) 

出力は何を意味しますか?

また、以下の動作がどのように一貫しているかを理解したいと思います。私の質問には無関係

`()  =>() 
`("hi") => ("hi") 
`(`()) => ((clojure.core/list)) 

、ここでは実際に(())を返すコードスニペットです:

(conj `() `()) 

答えて

2

基本的には、巣の引用はしないでください。ここでは基本的なquote特殊形式を使用しますが、より複雑な構文引用にも同じ概念が適用されます。

あなたがこれを書く:

'() 
;;=>() 

これを書いとしてまったく同じです:

(quote()) 
;;=>() 

だから、あなたがこれを書くとき:

'('()) 
;;=> ((quote())) 

と同じですこれを書いてください:

あなたが行うことができます
(quote ((quote()))) 
;;=> ((quote())) 

ことの一つは、最も外側のリストを単に引用されています

'(()) 
;;=> (()) 

それとも、はるかに多くの一般的なソリューションですlist機能、次のことができます。

(list) 
;;=>() 

(list "hi") 
;;=> ("hi") 

(list (list)) 
;;=> (()) 

(list 1 (+ 1 1) 3) 
;;=> (1 2 3) 
関連する問題