2010-12-16 86 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))