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 回答