Erlang ライブラリにさらにシンボルを追加したいと思いました。例 行列ライブラリの場合、A**B は行列の乗算などを意味する可能性があります。同じことに関するヘルプは見つかりませんでした。また、erlang:apply() を使用して + - や % などの関数を適用する方法を知っている人もいます。
質問する
472 次
2 に答える
3
関数名として任意のアトムを使用できます。アトムに特別な記号がある場合は、その引用形式を使用する必要があります'**'
。
-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 に答える