3

次のコードがあるとします。

(handler-case (read ...)
  (parse-error (condition)
     (format t "What text was I reading last to get this error? ~s~&"
       (how-to-get-this-text? condition))))

アクセサーしか見えparse-namestringませんが、解析していたテキストではなく、エラーのメッセージが表示されます。

編集

私の場合、問題はそれほど一般的ではないため、解析に失敗した文字列全体を含まない代替ソリューションも良い場合があります。

解析しようとしているこのコード例を想像してください。

prefix(perhaps (nested (symbolic)) expressions))suffix

場合によっては「接尾辞」で停止する必要があり、他の場合は続行する必要があります。接尾辞自体には他の意味はありませんが、パーサーが次に実行する必要があるアクションの指標であるだけです。

4

2 に答える 2

4

READ は、文字列ではなくストリームから解析します。s 式は任意に長くすることができます。READ は読み取った内容の文字列を保持する必要がありますか?

必要になるのは、特別なストリームです。標準の Common Lisp には、ユーザー定義ストリームのメカニズムはありません。しかし実際には、すべての実装にそのような拡張可能なストリームがあります。たとえば、「灰色のストリーム」を参照してください。

http://www.sbcl.org/1.0/manual/Gray-Streams.html

于 2012-10-19T14:44:21.713 に答える
3

それを行うための標準機能はありません。で何かを総当たりできるかもしれませんがread-from-string、何をするにしても、追加の作業が必要になります。

于 2012-10-19T14:22:38.363 に答える