打印clojure中的符号列表

Mar*_*ark 3 lisp clojure

我试图打印出符号列表,我想知道是否可以删除引号.

(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)

Mat*_*ard 7

('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)