2012-10-30 6 views
4

다음 가변적 인 함수 (define doSomething (lambda (x . rest) ...이 있습니다. 함수는 숫자를 사용하여 호출됩니다 (예 : (doSomething 1 2 3 4 5)). x1이고 rest(2 3 4 5)입니다. ((3 4 5)) : 스키마가 변수를 변수로 전달

내가 재귀 함수를 호출하고 어떻게 든리스트의 목록으로 rest 매개 변수를받을 (3 4 5)xrest로 두 번째 숫자 (2)를 넣어하려고

. (+ x (doSomething (car rest) (cdr rest)))

그것은 내가 Pretty Big를 사용하고 있음을 언급 할 가치가있다 :

내가 현재 다시 함수를 호출을 시도하는 방법이다. 고마워, 고마워.

답변

2

그래서 당신은 당신이 rest은 가변 인수입니다

(doSomething (car rest) (cdr rest)) ; x=2 rest = '((3 4 5)) 

때문에 될 겁니다 혼합하여 첫 번째 호출 이후의 통화에서

(doSomething 1 2 3 4 5) ; x = 1 rest = '(2 3 4 5) 

을에, 무엇 나머지 일치있어, 그래서 첫 번째 인수 다음에 오는 모든 것을 취해서 rest이라는 목록을 만들어 이중 목록으로 만듭니다. 당신은 아마 apply 또는 무언가를 사용하고 싶을 것입니다 :

(define doSomething (lambda (x . rest) 
         (display x) 
         (if (not (null? rest)) 
         (apply doSomething rest) 
         #f))) 
+0

마지막으로 그것은 감사합니다, 감사합니다. –

관련 문제