因此尝试制作类似于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])
这很好用,但我最不想做的就是这样做,所以我不需要"=>"
,但可以使用=>
我可以提示如何使=>
成为一个有效的符号,我可以在我所指的上下文中解析它?
答案 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))))