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

我有以下可变参数函数(定义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)))
点赞