我试图打印出符号列表,我想知道是否可以删除引号.
(def process-print-list
(fn [a-list]
(cond (empty? a-list) 'false
(list? a-list) (let [a a-list] (println (first a)) (process-print-
list (rest a) ))
:else (process-print-list (rest a-list) ))))
Run Code Online (Sandbox Code Playgroud)
列表是('x'y'z))
具有以下输出:
(quote x)
(quote y)
(quote z)
Run Code Online (Sandbox Code Playgroud)
我只是想把它打印出来:
x
y
z
Run Code Online (Sandbox Code Playgroud)
('x 'y 'z)是一个句法缩写((quote x) (quote y) (quote z)).如果你真的想要一个符号列表(即(x y z)),你可能在某个地方引用太多.
'(x y z) ;=> (x y z)
'('x 'y 'z) ;=> ((quote x) (quote y) (quote z))
(list 'x 'y 'z) ;=> (x y z)
Run Code Online (Sandbox Code Playgroud)
通常,除非您知道自己在做什么,否则不要使用引号构建列表.请改用list构造函数.
另外,我会在这里选择迭代而不是递归.这很好用:
(doseq [sym some-list]
(println sym))
Run Code Online (Sandbox Code Playgroud)