2010-12-16 10 views
3

私は記号のリストを印刷しようとしていましたが、私は が引用符を削除できるかどうか疑問に思っていました。私はちょうどそれをプリントアウトして取得しようとしていますclojureのシンボルのリストを印刷

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

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

ある

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コンストラクタを使用してください。

もう1つの注意点として、ここでは反復を再帰で選択します。これは正常に動作します。

(doseq [sym some-list] 
    (println sym)) 
関連する問題