Scheme将变量传递给可变参数函数

时间:2012-10-30 13:10:39

标签: recursion scheme

我有以下可变函数(define doSomething (lambda (x . rest) ...。该函数通过使用数字来调用,例如:(doSomething 1 2 3 4 5)(因此,调用x将为1rest将为(2 3 4 5))。

当我尝试递归调用该函数并将第二个数字(2)设为xrest设为(3 4 5)时,我会以某种方式收到rest参数列表:((3 4 5))

这是我目前尝试再次调用该函数的方法: (+ x (doSomething (car rest) (cdr rest)))

值得一提的是,我正在使用Pretty Big。请指教,谢谢。

1 个答案:

答案 0 :(得分:2)

所以你在第一次电话中混合并匹配其余部分

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

在随后的通话中,您最终会以

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

因为rest是一个可变参数,所以它接受第一个参数之后的所有内容,并为你创建一个名为rest的列表,因此是双重列表。您可能希望使用apply或其他内容,例如:

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