检测Clojure表达式是否是原始的

时间:2012-07-30 05:11:30

标签: clojure primitive

是否有可能以某种方式检测Clojure表达式是否保证是原始的?

e.g。我想要一个可以做到这一点的宏

(is-primitive-expression? (+ 1.0 2.0))
=> true

(is-primitive-expression? (+ 1N 2.0))
=> false

2 个答案:

答案 0 :(得分:4)

我不确定我是否完全理解原始表达是什么(仍然在阅读它)。但是,我发现了一个名为clojure.contrib.repl-utils的{​​{1}}函数,它声称返回有关表达式是否是原始的信息。

见这里:http://clojuredocs.org/clojure_contrib/clojure.contrib.repl-utils/expression-info

我只是复制了源代码并尝试了它,但发现我需要首先执行此导入:

expression-info

然而,我用你的例子试了一下,但两者都返回了(我试过引用和不引用的表达式,因为我无法分辨它需要哪一个):

(import '(clojure.lang RT Compiler Compiler$C))

也许其中一些可以为您提供有用的线索/提示,但这可能是非常无益的,因为我不太了解您的要求(还)。

答案 1 :(得分:2)

一个宏,它遍历表单并检查所有类的类 然后验证给定树中的所有符号都是原始类型可以做到这一点。你必须决定是否计算宏扩展为原语的宏,如果是,那么首先宏扩展参数。