【问题标题】:Write clojure macro编写clojure宏
【发布时间】:2022-02-10 23:46:03
【问题描述】:

我想在 clojure 中编写一个宏。宏的调用方式如下 (FORI from to task) 例如(FORI 1 10 (println i)) 并且应该打印从 1 到 10 的数字。到目前为止我有

(defmacro FORI [from to task]
  `(let [i# (range ~from ~to)]
     ~task))

我不知道如何将列表 i# 放入(打印 i)。

感谢您的帮助。

【问题讨论】:

标签: clojure macros


【解决方案1】:

如果您取消引用它们的引用形式,您可以在卫生形式中使用任何符号:

(defmacro fori [from to task]
  `(doseq [~'i (range ~from ~to)]
      ~task))

所以这里在扩展形式中,符号i 将被替换而不会改变。

注意,在宏中使用固定符号通常不是一个好习惯,因为现在i 会影响其他同名变量。

【讨论】:

  • 非常感谢 :) 作为 clojure 初学者,宏对我来说很难。
猜你喜欢
  • 2018-05-23
  • 2020-05-29
  • 1970-01-01
  • 1970-01-01
  • 2010-11-14
  • 1970-01-01
  • 1970-01-01
  • 2018-11-21
  • 1970-01-01
相关资源
最近更新 更多