这个问题纯粹来自“心理主宰”,可能没有实用价值。Clojure编译时常量
如果我使用def
在Clojure中定义了一个值,编译器是否可以在编译时引导进行评估,而不是等到运行时?
(def the-answer 42)
(+ the-answer 1)
我想我可以定义一个宏,但调用语法也有点尴尬:
(defmacro the-answer [] 42)
(+ (the-answer) 1)
这也适用,但仍是丑陋:
(+ `~the-answer 1)
我也明白(或相信)Clojure在编译时评估常量表达式:
(def milliseconds-per-day (* 24 60 60 1000))
我刚学Common Lisp的,但我的理解是,Common Lisp的支持用户自定义的读者宏,所以你可以定义一个读者宏(类似#$
),在编译时评估以下符号:
(+ #$the-answer 1)
顺便说一句,该语法不是比宏调用“漂亮”。
如何让Clojure在编译时评估常量变量,并用实际值替换参考?它已经这样做了吗?
在任何人开始引用Knuth定律(“过早优化是万恶之源”)之前,我会问这个问题以更好地理解Clojure汇编的内部。
这不是什么形象化。奉献是夸夸其谈或教条主义。 –
是的,我删除它。 – Ralph