プログラミング Gauche - 7 章つづき

本に印をつけるのに、無印良品の透明付箋紙を使って見ました。本に貼り付けても文字が隠れないし、紙の付箋紙よりもしっかりしているところがよいです。
今日はローカル変数のスコープと可変長引数について。4 節の練習問題をやってみた。


;; 受け取った可変長引数をリストにして返す
(define (list . a) a)
そもそも受け取った引数はリストになっているのだから、そのまま返せばいいのではないでしょうか。単純だけど、これで合ってると思います。
可変長引数を受け取る手続きを MIT 記方で書くと

(define (func (a b . c)) ...)
(define (func . a) ...)
になります。lambda で書くと

(define func (lambda (a b . c) ...))
(define func (lambda a ...))
ですね。
0 個以上の可変長引数の場合だけ括弧でくくらないのですね。これは仮引数 a を括弧でくくってしまうとそれがリストになってしまうので、実引数全体にマッチさせるには括弧でくくってはいけないということでしょうか。MIT 記法の場合は func があるのでドット記法で書けますが、lambda の場合はドットの左側に何もないので、こういう書き方が必要である、と。*1

*1:間違ってるかも