Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2010-06-18

Getting Started in *LISP (27)

| 23:50 | Getting Started in *LISP (27) - わだばLisperになる を含むブックマーク はてなブックマーク - Getting Started in *LISP (27) - わだばLisperになる

今回は、4.3章 *Lisp Error Checking です。

4.3 *Lisp Error Checking

*Lispには、 *interpreter-safety* という変数があり現在のエラーチェックの度合いを設定したり確認したりできるとのこと。

度合いは、0〜3の整数で表わされ、

0 実行時のエラーチェックは無効

1 最小限の実行時エラーチェックだけ有効。コードのどの位置でエラーが起きたかの通知は不正確かもしれない

2 将来の拡張のための予約

3 実行時エラーチェックが全て有効。

そして、処理系のデフォルトは3。

この値を変更するときには、

(setq *interpreter-safety* 3)

とする。

大まかにいって、3はフルにエラーチェック、0はチェックなし。

デバッグの時には、3を利用し、一度正しくプログラムが走ることが確認できれば0にしてスピードを上げる、というような使い方ができる。

(でき得る限りのスピードを出すということになると型宣言+コンパイルということになる。この辺りは、5章で解説)

レベル1は、主にほぼ完全に動くコードをテストするのに使える。

エラーの内容は正確だけれど、実際にエラーを起こしている場所とエラーが起きるタイミングが異なることがある。

> (setq *interpreter-safety* 1)

> (/!! 3 0)	;; The error occurs here, but is not signaled...
#<FLOAT-Pvar 5-32 *DEFAULT-VP-SET* (32 16)>

> (+!! 2 3)	;; Still not reading a value from the CM...
#<FIELD-Pvar 11-3 *DEFAULT-VP-SET* (32 16)>

> (*sum 1)	;; Upon reading a value, the error is signaled:
>>Error: The result of a (two argument) float /!! overflowed
CMI::WAIT-UNTIL-FEBI-OUTPUT-FIFO-NOT-EMPTY:
:A  0: Abort to Lisp Top Level
->

のような場合、(*sum 1)で実際に値を読み込んだときにエラーが起きたりする。

ちなみに、シミュレーターの場合の動作では、どうやら実質3にしか設定されなさそうな様子。

次回、4.4から再開です。