<function>
<fname property="Normal Order / LEVEL: 0">
ErrHandler
</fname>
<prototype>
LISP形式

(ErrHandler exp)

XML形式

<ErrHandler> exp </ErrHandler>
</prototype>
<prototype>
C関数宣言

XLtype * cErrHandler(XLtype * exp);
</prototype>
<explanation>
エラーをとらえることの出来る特殊なEvalを使って、expを評価する。評価の結果、expがエラー型でないばあいはそのままexpを戻り値とする。 exp がエラー型であった場合は、これを分解し、以下のような構造型に変形して、それを戻り値とする。 


LISP形式

(Error シーケンス番号 エラー発生サイトURL　エラー発生ファイル名　エラー発生関数  エラーコード exp)

XML形式
<pre>
<Error>
	シーケンス番号 \
	エラー発生サイトURL \
	エラー発生ファイル名 \
	エラーコード \
	exp
</Error>
</pre>

もし、エラーが発生していない場合は、 

LISP形式

(Error シーケンス番号 サイトURL　ファイル名　"ErrHandler" 0 exp)

XML形式
<pre>
<Error>
	シーケンス番号
	サイトURL
	ファイル名
	ErrHandler
	0
	exp
</Error>
</pre>

となる。基本的にはエラー型の値の内容がErrorから始まる、構造型に変化したものである。こうすることにより、インタープリタはこれをエラー型とは認識しなくなるので、普通の構造型と同様に処理できるようになる。たとえば、以下のように使う。 

<pre>
	(define c (ErrHandler (/ a b)))
	<If> (Not (= (GetElement c 4) 0))
		<Then> ゼロ割に関する処理 </Then>
		<Else> 通常処理 </Else>
	</If>
</pre>
</explanation>
</function>
