【发布时间】:2014-10-28 14:42:21
【问题描述】:
我在 clojure 中使用了 for 循环宏:
(defmacro for-loop [[sym initial check-exp post-exp] & steps]
`(loop [~sym ~initial]
(if ~check-exp
(do
~@steps
(recur ~post-exp)))))
我想写一个简单的函数来求n个数字的总和,比如:
for(int i=1; i<n; i++)
sum=sum+i;
如何使用 for-loop 宏在 clojure 中执行此操作?
【问题讨论】:
-
拥有一个变量并更新它的值不是惯用的clojure,你可能想要
(reduce + (range (inc n)))这样的东西。 -
但是,这种情况仅在不使用 for 循环宏的情况下发生。反正有没有使用for循环宏?我正在尝试学习宏,因此问。
-
“学习宏”是指“学习编写宏”吗?还是“学习使用宏”?因为后者不需要太多专业知识(不过需要一些文档),而且它绝对是前者的先决条件。