Compiling defun f f: (string -> fixnum) Type Error: No matching primitive for (+-two x 0) Possible sigs: ((real real -> real) (fixnum fixnum -> fixnum))これは, (+-two x 0)という式に型エラーがあることをいっている. より正確には, +-twoという式の入力オペランドの型に誤りがあること をいっている. これは実は,
(defun f (x) (declare (string x) (reply-type fixnum)) (+ x 1))というソースをコンパイルした時のメッセージであり, ここから, (+ x 1)がマクロ展開されて, (+-two x 0)となり, そのオペランドの xが
string型であったために型エラーとなったのである.
またこのような型エラー時にはコンパイラは, そのオペレーション(この場合 +-twoに対して許されている型を情報として付加する.
Possible sigs: ((real real -> real) (fixnum fixnum -> fixnum))この場合, +-twoは引数がともに
realで, 結果がrealに
なるものか, 引数がともにfixnumで, 結果がfixnumになるかど
ちらかが許されていることを示している.
同様なメッセージはユーザーが定義した関数への適用を誤った場合にも表示さ れる.