2

私は現在、Clojureで別の言語( Shen )を実装しています。

Shenには記号「./」がありますが、Clojureではこれは評価前に解釈されるため、エラーが発生します。この関数をClojureコードにコンパイルしているマクロ内に「./」は必要ありません。

これを無視する方法はありますか?a/またはxyz/に置き換えると同じエラーメッセージが表示されるため、修飾記号として解釈されますが、名前はないと思います。

私の現在のマクロは

(defmacro kl/trap-error [x [y z r]] `(try ~x (catch Exception '~z ~r)))

しかし、Shenコードで呼び出すと、次のようになります。

kl=> (trap-error (/ 1 0) (./ E (error-to-string E)
RuntimeException Invalid token: ./  clojure.lang.Util.runtimeException (Util.java:156)
CompilerException java.lang.RuntimeException: Unable to resolve symbol: E in this context, compiling:(NO_SOURCE_PATH:0)
CompilerException java.lang.RuntimeException: Unable to resolve symbol: E in this context, compiling:(NO_SOURCE_PATH:89)

誰かがこれを手伝ってくれることを願っています。

前もって感謝します。

4

1 に答える 1

2

これは、Clojureリーダー(Clojureプログラマーに与えられていない特権)を変更しないと不可能です。「Shenには記号./がありますが、Clojureではこれは評価前に解釈されるため、エラーが発生します」という記述は正しくありません。ただし、読者はこれらの文字を見て何を理解することさえできないため、解釈や評価はまったく行われません。データ型はそうあるべきです。

  • それらはリストですか?いいえ、親はありません。
  • それらは文字列ですか?いいえ、引用符はありません。
  • それらはシンボルですか?いいえ、名前空間はありますが名前はありません。
  • ...このような多くのケース...
  • 私はあきらめます、これは有効なClojureコードを表すデータ構造ではありません。
于 2012-01-08T20:50:39.443 に答える