【问题标题】:Macro want to use symbol instead of string in clojure宏想在 clojure 中使用符号而不是字符串
【发布时间】:2013-05-04 18:40:32
【问题描述】:

所以尝试制作类似于 haskell lambda 语法的东西,并使用宏,这就是我所拥有的:

(defmacro / [& all]
  (let [args (take-while #(not (= %1 "=>")) all)
        argCount (count args)
        expr (last (split-at (+ argCount 1) all))]
    `(fn ~(vec args) (~@expr))))

(reduce (/ x y "=>" + x y) [1 2 3])

这很好用,但我最不想做的就是让它,所以我不需要"=>",但可以使用=>

任何提示我可以如何使=> 成为我可以在我所指的上下文中解析的有效符号?

【问题讨论】:

    标签: macros clojure lisp


    【解决方案1】:

    将符号的name 与字符串进行比较:

    (defmacro / [& all]
      (let [args (take-while #(not (= (name %1) "=>")) all)
            argCount (count args)
            expr (last (split-at (+ argCount 1) all))]
        `(fn ~(vec args) (~@expr))))
    

    【讨论】:

    • 是的!这甚至让我使用 -> 而不是 =>!迷人的!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-13
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    相关资源
    最近更新 更多