proglog

主にプログラミングに関する断片的メモ

可変の引き数を取る関数の定義

いろいろスタックに積んでいて、今 独習 Scheme 三週間 Teach Yourself Scheme in Fixnum Days 14.2 Scheme における amb の実装を読んでた。

なにやらマクロが出てくるけど、その中で、

(define-macro amb
  (lambda alts...
    `(let ((+prev-amb-fail amb-fail))

なんなのだろうか、このラムダ式は。

調べてみると、 メモ|Scheme関連の「可変引数を受け取る関数/レストパラメータ」の3っぽい。

(define f
  (lambda ...
    (print ...)
    (newline)))
(f)
(f 1)
(f "ask" "alsdkfa" "alkkfol" "lakkjf")

出力は

gosh> ()

#<undef>
gosh> (1)

#<undef>
gosh> (ask alsdkfa alkkfol lakkjf)

#<undef>

という感じ。


この「alts...」とか「...」って普通の仮引き数名ってことなんだろうか。
ちょっとびっくり。

http://codepad.org/TU7Wb0Cf