使用 Clojure 预处理国外源代码

foreign source code pre-processing with Clojure

我想像这样预处理来自另一种语言的代码:

Predicate1(X) => Predicate2(Y)
<% (clojure-func "Predicate3" "X" "Y") %>

基本上,尖括号内的内容会被执行,并将发出的字符串输出插入到字符串中。我看到有 HTML 个模板库。我想知道我是否可以使用 Clojure 宏之类的东西。可能我不知道像 Fleet or Selmer 这样的模板库提供的好处,需要一些指导。

在上面的示例中,我想创建更多表达式的组合:

Predicate3(X_a) => Predicate2(Y)
Predicate3(X_b) => Predicate2(Y)

最终,我确实需要跟踪外语的变量。为此,预处理可能是错误的方法,相反,我最好进行完整的代码生成。

P.S.: 对于那些想知道我正在尝试扩展马尔可夫逻辑网络 (MLN) 语言的人。

Clojure 宏不会直接帮助您解决这个问题。宏仍然要求表达式本质上是 Clojure 可读的语法,调用形式为 (macro arg1 arg...).

其他 Lisp 确实允许您使用 reader 宏扩展可读语法,但 Clojure 决定不允许它们。