打印clojure中的符号列表

时间:2010-12-16 11:07:10

标签: clojure lisp

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

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

列表是('x'y'z))

使用以下输出:

(quote x)
(quote y)
(quote z) 

我只是想把它打印出来:

x
y
z

2 个答案:

答案 0 :(得分: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)

通常,除非您知道自己在做什么,否则不要使用引号构建列表。改为使用list构造函数。

另一方面,我会在这里选择迭代而不是递归。这很好用:

(doseq [sym some-list]
  (println sym))

答案 1 :(得分:2)

您应该使用name fn来获取符号名称。

(def my-list (list 'x 'y 'z))

(defn process-list
  [a-list]
  (map #(name %) a-list))

(process-list my-list)
;=> ("x" "y" "z")

或打印

 (defn process-print-list
    [a-list]
    (doall (map #(println (name %)) a-list)) 
     nil)

  (process-print-list my-list)
  ;x
  ;y
  ;z
  ;=>nil

或者将它们组合起来获得你想要的返回类型......