Erlang添加用户定义的符号,如**或< *

时间:2013-02-28 03:23:03

标签: erlang

我想在我的Erlang库中添加更多符号。例 对于矩阵库A ** B可能意味着矩阵乘法等。 我找不到同样的帮助。 也有人知道如何使用erlang应用+ - 或%函数:apply()

2 个答案:

答案 0 :(得分:2)

您可以使用任何atom作为函数名称。如果你在原子中有specail符号,你必须使用它的引用形式'**'

-module(operator).
-export(['**'/2]).

'**'(A, B) ->
    {'**', A, B}.

虽然没有使用这种算法的语法糖。所有默认运算符都是模块erlang中定义的函数,可以像这样访问:

1> operator:'**'(a, b).
{'**',a,b}
2> F0 = fun operator:'**'/2.
#Fun<operator.**.2>
3> F0(c, d).
{'**',c,d}
4> F1 = fun erlang:'+'/2.
#Fun<erlang.+.2>
5> F1(1, 2).
3
6> F2 = fun erlang:'rem'/2.
#Fun<erlang.rem.2>
7> F2(5, 3).
2

答案 1 :(得分:0)

如果你真的,真的想要这个,你可以使用解析变换,但你的代码必须在转换之前在语法上正确。因此,例如,您的解析转换可以将A *_* B重写为exp(A, B),因为A *_* B将被解析为类似(A * _) * B的内容。但是,您将无法转换A ** B

另外,使用解析变换来做一些非常糟糕的事情是非常糟糕的。