疑問が一つ
define式で関数を定義する方法が2種類ありますが、これは完全に等価なのでしょうか?一つ、lambda式を使う場合ではうまくいかないパターンがありました。書き方が違うのかな?どうなのでしょう?
具体的には、引数として任意の数の引数が取れるような関数を定義する場合に以下のように書きます。
> (define (avg . ls) (/ (apply + ls) (length ls)))
これを、lambdaを使って以下のように書くと、.の場所がおかしいとエラーとなってしまいました。処理系の問題なのでしょうか?
> (define avg (lambda ( . ls) (/ (apply + ls) (length ls))))
判明
http://www.stdio.h.kyoto-u.ac.jp/~hioki/gairon-enshuu/SchemeNotes/lambda.html にて、以下の記述を発見
;; 次の定義は「(define (mylist . x) x)」と同じ
> (define mylist (lambda x x))
よって、上記のエラーになっていたものは以下のように記述すればOKでした。
> (define avg (lambda ls (/ (apply + ls) (length ls))))