3

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

4

2 回答 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 *_* Bexp(A, B),因为A *_* B将被解析为(A * _) * B. 但是,您将无法转换A ** B

此外,对如此无聊的事情使用解析转换是一个非常糟糕的主意。

于 2013-03-02T02:43:35.217 回答