我有以下可变函数(define doSomething (lambda (x . rest) ...
。该函数通过使用数字来调用,例如:(doSomething 1 2 3 4 5)
(因此,调用x
将为1
而rest
将为(2 3 4 5)
)。
当我尝试递归调用该函数并将第二个数字(2
)设为x
而rest
设为(3 4 5)
时,我会以某种方式收到rest
参数列表:((3 4 5))
。
这是我目前尝试再次调用该函数的方法:
(+ x (doSomething (car rest) (cdr rest)))
值得一提的是,我正在使用Pretty Big
。请指教,谢谢。
答案 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)))