2

试图创建 Haskell 的 lambda 语法的宏形式,除了最后一个调整之外,我非常接近,/(应该是 \,但不能抱怨..)需要在它旁边留一个空格,有什么办法可以让它这样我的宏不需要它和它的第一个参数之间的空间?

例如:

(reduce (/x y -> x y) [1 2 3])

代替:

(reduce (/ x y -> x y) [1 2 3])

我怀疑这是不可能的,但唯一确定的方法是问知道的人,所以这个词是什么?

4

2 回答 2

5

不能。宏不能改变语言的词法语法。这需要读取宏,而 Clojure 没有。

于 2013-05-04T18:58:23.290 回答
2

不,但是如果你想做一些更雄心勃勃的事情,你可以定义另一个宏with-haskell-lambdas来包装你的整个命名空间。那个宏可以查看它下面的所有表单,例如使用 tree-seq,找到表单的符号/x,然后替换他们/ x改为。

于 2013-05-04T20:54:30.010 回答