2010-12-16 13 views
3

Ich habe versucht, eine Liste von Symbolen auszudrucken, und ich frage mich, ob ich die Anführungszeichen entfernen könnte.Liste der Symbole in clojure drucken

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

die Liste ist ('x' y ‚z))

mit der folgenden Ausgabe:

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

ich gerade bin versucht, es zu bekommen auszudrucken:

x 
y 
z 

Antwort

2

Sie sollten name Fn verwenden, um Symbolnamen zu erhalten.

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

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

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

Oder mit Druck

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

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

Oder kombinieren diejenigen Rückgabetyp Sie wollen bekommen ...

7

('x 'y 'z) ist eine syntaktische Abkürzung für ((quote x) (quote y) (quote z)). Wenn Sie tatsächlich eine Liste von Symbolen (d. H. (x y z)) möchten, dann zitieren Sie wahrscheinlich zu viel irgendwo.

Im Allgemeinen, erstellen Sie keine Listen mit Zitat, wenn Sie nicht wissen, was Sie tun. Verwenden Sie stattdessen den list-Konstruktor.

Bei einer anderen Anmerkung würde ich hier Iteration über Rekursion wählen. Das funktioniert gut:

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