2010-12-16 2 views
3

나는 심볼리스트를 프린트하려하고 있었다. 나는 이 따옴표를 제거 할 수 있는지 궁금했다.클로저에있는 심볼의 프린트 목록

(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)) 
관련 문제