Next: Up: Previous:

型エラー

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)となり, そのオペランドの xstring型であったために型エラーとなったのである.

またこのような型エラー時にはコンパイラは, そのオペレーション(この場合 +-twoに対して許されている型を情報として付加する.

 Possible sigs:
 ((real real -> real) (fixnum fixnum -> fixnum))
この場合, +-twoは引数がともにrealで, 結果がrealに なるものか, 引数がともにfixnumで, 結果がfixnumになるかど ちらかが許されていることを示している.

同様なメッセージはユーザーが定義した関数への適用を誤った場合にも表示さ れる.



Mitsubishi Research Institute,Inc.
Thu Feb 27 20:14:12 JST 1997