宏想在clojure中使用符号而不是字符串

时间:2013-05-04 18:40:32

标签: macros clojure lisp

因此尝试制作类似于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])

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

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

1 个答案:

答案 0 :(得分: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))))