我有以下可变参数函数(定义doSomething(lambda(x.rest)….函数通过使用数字来调用,例如:(doSomething 1 2 3 4 5)(因此使用该调用x将为1并且休息将是(2 3 4 5)).
当我尝试递归调用函数并将第二个数字(2)作为x并将其作为(3 4 5)时,我以某种方式接收rest参数作为列表列表:((3 4 5)).
这就是我目前尝试再次调用该函数的方法:
(x(doSomething(车休息)(cdr rest)))
值得一提的是,我正在使用Pretty Big.请指教,谢谢.
最佳答案 因此,在第一次通话中,您将混合并匹配其余内容
(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)))