可变的方案

时间:2013-01-30 18:33:21

标签: variables scheme arity

(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))

提前致谢!

2 个答案:

答案 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))
相关问题