1

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

这工作得很好,但我想做的最后一件事是让它,所以我不需要"=>"但可以使用=>

任何提示我如何制作=>一个可以在我所指的上下文中解析的有效符号?

4

1 回答 1

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))))
于 2013-05-04T18:43:20.473 回答