2010-12-16 84 views
3

我试图打印出符号列表,我想知道如果我 可以删除引号。在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))))) 

名单是( 'X' Y“Z))

与下面的输出:

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

我只是想获得它打印出来:

x 
y 
z 

回答

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 

或合并,你希望这些得到的返回类型...

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