나는 Clojure와 SICP를 배우기 위해 SICP를 Clojure로 번역 할 것입니다. 현재, 2.2.2 절의 Count Leaves 절차에 문제가 있습니다.Clojure에서 count-leaves in SICP
목표는 트리의 목록 표현을 취하는 함수를 작성하는 것입니다. '(1 2'(3 4))과 4
지금까지이 경우 잎의 수를 계산, 나는 함께 온 가장 가까운 그러나
(defn count-leaves
[coll]
(cond
(nil? coll) 0
(not (seq? coll)) 1
:else (let [[left & right] coll] (+ (count-leaves left) (count-leaves right)))
))
,이 처리하지 않습니다이다 하위 트리를 올바르게 특히,
구성표 구현 from the book이 주(count-leaves '('(1)))
2 대신 1
평가 : 한 언어에서 다른 언어로
(define (count-leaves x)
(cond ((null? x) 0)
((not (pair? x)) 1)
(else (+ (count-leaves (car x))
(count-leaves (cdr x))))))
"... (count-leaves '('(1))) ~을 2 ..."로 평가합니다 ... - 그렇게해야합니다. ''('(1))'은 ((quote (1)))'로 평가됩니다. 이미 인용 된 목록 안에 하위 목록을 인용하지 마십시오. – jkiiski
감사합니다. '('(1))이 (list (list 1))와 동일하지만 분명히 틀렸다고 생각했습니다. 추가 정보 : http://stackoverflow.com/questions/38515614/clojure-list-inside-list-declaration – Sven