(define test (lambda args
(if (= (length args) 1) (display (car args))
(begin (display (car args))
(test (cdr args))))))
我在网上寻找它并没有找到答案,我能够为我的func获取可变数量的参数,但是如何将它们作为单个列表传递给下一次迭代?
更清楚一点,如果我打电话:
(test (list 1 1) (list 2 2) (list 3 3))
我正在考虑获得:
(1 1) (2 2) (3 3)
但我明白了:
(1 1) ((2 2) (3 3))
提前致谢!
答案 0 :(得分:2)
(define (test . args)
(if (= (length args) 1)
(display (car args))
(begin
(display (car args))
(apply test (cdr args)))))
答案 1 :(得分:2)
args
将是传递给test
的参数列表。第一次向它传递三个列表时,args
将是这三个列表的列表。递归地传递它(cdr args)
,这是最后两个列表的列表,所以现在args
是一个列表,其中包含具有最后两个列表的列表。也就是说,args
是(((2 2) (3 3)))
,您需要((2 2) (3 3))
。您可以通过applying test
函数将其修复到列表中:
(apply test (cdr args))
如果(cdr args)
为((2 2) (3 3))
,则与执行相同:
(test (2 2) (3 3))