나는 와 함께 일하고있다 Little Schemer 스킴을 배우고 제 환경에 PLT-Scheme을 사용합니다. 작은 고안자 스킴의 연속을 이해하는 것을 돕기
재귀와 함께 엄청난 도움이되었습니다 (지금 나를 위해 간단합니다) 그러나 나는 "집"을 소개하고 연속 전체 함수를 호출하는 책의 일부에 갇혔어요.
다음은 사용 된 예제 코드입니다. 나는 재귀적인 요소를 이해하지만, 특히 람다 함수에 붙어있다. 내 마음이 경로를 따라갈 수없고, 그 람다 함수에 대한 인수가 어떻게 설정되어 있는가? (유일한 호출은 재귀에서 다시 호출하는 것이기 때문에, 함수 본문 내에서 구체적인 사용이 없음).
누군가가 람다 수집기로 함수를 재귀하여 계산 경로를 무너 뜨릴 수 있다면 나를 도울 수 있습니다.
;; Build a nested list of even numbers by removing the odd ones from its
;; argument and simultaneously multiply the even numbers and sum the odd
;; numbers that occur in its argument.
(define (even-only-collector l col)
(cond
((null? l)
(col (quote()) 1 0))
((atom? (car l))
(cond
((even? (car l))
(even-only-collector (cdr l)
(lambda (newl p s)
(col (cons (car l) newl)
(* (car l) p) s))))
(else
(even-only-collector (cdr l)
(lambda (newl p s)
(col newl
p (+ (car l) s)))))))
(else
(even-only-collector (car l)
(lambda (al ap as)
(even-only-collector (cdr l)
(lambda (dl dp ds)
(col (cons al dl)
(* ap dp)
(+ as ds)))))))))
;; The collector function
(define (collector newl product sum)
(cons sum
(cons product newl)))
감사합니다.
@lpthnc : newLISP를 보았습니까? – Ixmatus