2013-05-04 35 views
1

所以试图制造类似Haskell的lambda语法,以及与此宏是我的本钱:宏想Clojure中使用的符号,而不是字符串的

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

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

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

任何提示我怎么可能让=>有效的符号,我可以只解析在上下文我推荐呢?

回答

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) ([email protected])))) 
+0

是的!这甚至让我使用 - >而不是=>!可爱!谢谢! – 2013-05-04 18:47:40

相关问题