我想在我的 Erlang 库中添加更多符号。示例 对于矩阵库 A**B 可能意味着矩阵乘法等。我找不到任何帮助。也有人知道如何使用 erlang:apply() 来应用 + - 或 % 等函数
问问题
472 次
2 回答
3
您可以使用任何原子作为函数名。如果您在 atom 中有特殊符号,则必须使用其引用形式'**'
:
-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
于 2013-02-28T07:47:34.203 回答
0
如果您真的非常想要这个,您可以使用解析转换,但您的代码在转换之前必须在语法上正确。因此,例如,您的解析转换可以重写A *_* B
为exp(A, B)
,因为A *_* B
将被解析为(A * _) * B
. 但是,您将无法转换A ** B
。
此外,对如此无聊的事情使用解析转换是一个非常糟糕的主意。
于 2013-03-02T02:43:35.217 回答