1

タスク: プロジェクトに ECL Lisp を埋め込み、エラー処理と詳細なエラー レポート (発生場所、エラーの種類など) を設定します。

私はそのようにしようとしました:

cl_def_c_function_va(
    c_string_to_object("SYSTEM:UNIVERSAL-ERROR-HANDLER"),
    LispErrorHandler);

ECLには、組み込みAPIに関するドキュメントはなく、エラー処理に関するドキュメントもありません...

それを実装する方法を提案できますか?

4

1 に答える 1

6

これは Common Lisp の哲学ではないため、グローバル エラー ハンドラはありません。エラーを処理したい場合は、Lisp の方法で処理してください。

1) HANDLER-CASE または HANDLER-BIND を使用して適切なエラー ハンドラを設定し、評価されるフォームの周りのエラーをキャッチする関数を作成します。何かのようなもの

(DEFUN MY-EVAL (FORM) (HANDLER-CASE (EVAL FORM) (ERROR (C) ...) (MY-ERROR (C) ...) ...))

この関数は、C コードで定義して呼び出すことができます。

2) すべてのエラーをキャッチする ECL が作成する関数を使用します。最も重要なものは si_safe_eval(form, environment, error_value) です。ENVIRONMENT (通常は Cnil) で Lisp FORM を評価し、エラーが発生した場合はその出力または ERROR_VALUE を返します。

いずれかの手法を使用するいくつかの例: http://thread.gmane.org/gmane.lisp.ecl.general/5365 (2 番目のメッセージ) http://thread.gmane.org/gmane.lisp.ecl.general /8526/focus=8529

于 2011-10-13T21:30:23.650 に答える