我想在我的Erlang库中添加更多符号。例 对于矩阵库A ** B可能意味着矩阵乘法等。 我找不到同样的帮助。 也有人知道如何使用erlang应用+ - 或%函数:apply()
答案 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
。
另外,使用解析变换来做一些非常糟糕的事情是非常糟糕的。