2
(define test (lambda args 
  (if (= (length args) 1) (display (car args))
      (begin (display (car args))
      (test (cdr args))))))

ネットで探していたのですが、答えが見つかりませんでした。関数に可変数の引数を取得できましたが、単一のリストとしてではなく、次の反復に渡すにはどうすればよいですか?

より明確にするために、私が電話した場合:

(test (list 1 1) (list 2 2) (list 3 3))

私は取得するために実行していました:

(1 1) (2 2) (3 3)

しかし、私は得る:

(1 1) ((2 2) (3 3))

前もって感謝します!

4

2 に答える 2

2

argsに渡される引数のリストになりますtest。最初に 3 つのリストを渡すとargs、これら 3 つのリストのリストになります。(cdr args)最後の 2 つのリストのリストであるit を再帰的に渡すと、最後の 2 つargsのリストを持つリストを含むリストになります。つまり、あなたargs(((2 2) (3 3)))望むところです((2 2) (3 3))。関数をリストに適用することで修正できます。test

(apply test (cdr args))

である場合、これ(cdr args)((2 2) (3 3))次のことと同じです。

(test (2 2) (3 3))
于 2013-01-30T18:47:53.013 に答える
2
(define (test . args)
  (if (= (length args) 1)
    (display (car args))
    (begin
      (display (car args))
      (apply test (cdr args)))))
于 2013-01-30T18:40:09.997 に答える