可変の引き数を取る関数の定義
いろいろスタックに積んでいて、今 独習 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...」とか「...」って普通の仮引き数名ってことなんだろうか。
ちょっとびっくり。