2016-07-21 3 views
0

Я пытался объявить список внутри списка в Clojure.Clojure list внутри декларации списка

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

Что означает этот выход?

Кроме того, я хотел бы понять, как поведение ниже согласовано.

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

Unrelated на мой вопрос, вот фрагмент кода, который фактически возвращает (()):

(conj `() `()) 

ответ

2

В принципе, не гнездятся кавычки. Я собираюсь использовать базовую специальную форму quote, но те же понятия применимы и к более сложной цитате синтаксиса.

Когда вы пишете это:

'() 
;;=>() 

Это точно так же как написание этого:

(quote()) 
;;=>() 

Так что, когда вы пишете это:

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

Это то же самое, написав это:

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

Одна вещь, которую вы можете сделать, это просто процитировать наиболее удаленный список:

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

Или чем вы можете list функция, которая является гораздо более общее решение:

(list) 
;;=>() 

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

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

(list 1 (+ 1 1) 3) 
;;=> (1 2 3) 
Смежные вопросы