さきほどまでみてきたプログラムにも 変数の型宣言はなかったとおもいます。 また、 C 言語などのようにコンパイル時に型情報をしらべ、 合致しなかったら error を出すと言うこともありません。
このため、引数の数がおかしいのは 関数を実行しようとした段階で判定されます。 また、boolean の足し算などをしようとした段階ではじめて、 値についている型情報と関数が要求する型が合致しないといって、 error を出します。 とはいえ、実行時に 値の型を調べるための手続きは各種準備されているので、正しいプログラミングは出来ます。
> (define (bar x) (if (= x 0) #t (+ #t #f))) ; + は、 本来 #t,#f を受け付けない > (bar 0) #t ; (bar 0) は問題無く動く > (bar 1) ; (bar 1) を実行すると、 + の引数が違うと error を出す +: expects type <number> as 1st argument, given: #t; other arguments were: #f
99.9.29/ Tomio KAMADA: kamada@cs.kobe-u.ac.jp