我需要能夠像這樣操縱變量。Erlang:找到一個變量並將其倒轉
首先找到變量並檢查它是什麼(在這種情況下是一個運算符*/+等),然後將其反轉。例如,〜(5 + 9)的值是-14和 〜的值(3-5)爲2
我如何去這樣做呢?
我需要能夠像這樣操縱變量。Erlang:找到一個變量並將其倒轉
首先找到變量並檢查它是什麼(在這種情況下是一個運算符*/+等),然後將其反轉。例如,〜(5 + 9)的值是-14和 〜的值(3-5)爲2
我如何去這樣做呢?
1> F=fun({A,'+',B}) -> B+A; ({A,'-',B}) -> B-A; ({A,'/',B}) -> B/A end.
#Fun<erl_eval.6.54118792>
2> F({5,'+',9}).
14
3> F({3,'-',5}).
2
OP不希望F({5,'+',9})返回14. –
剛剛用Erlang 19 - 'F({5,'+',9})進行測試,'仍然返回14 – Amiramix
你是什麼意思通過顛倒運營商?這聽起來像你會想做相反的 - 所以加法變成減法,反之亦然,並且乘法變成除法,反之亦然。但是你的例子表明你想要執行操作,然後否定答案。例如,如果你只是「倒轉操作員」,那麼5 + 9會變成5-9 = -4。再一次,爲了得到5 + 9 = -14,你必須否定操作5 + 9的答案。在我們繼續之前,你能澄清一下嗎?
custom_action(A, Operator, B) ->
operate({A, Operator, B}) * -1.
operate({A, "+", B}) -> A + B;
operate({A, "-", B}) -> A - B;
operate({A, "*", B}) -> A * B;
operate({A, "/", B}) -> A/B.
現在你可以使用custom_action/3
像custom_action(5, "+", 9)
得到-14 custom_action(3, "-", 5)
得到2
你的意思是「否定」,而不是「反轉」?這很容易用負號而不是波浪號來實現,並且適用於您的兩個示例。由於操作符不是變量,因此「找到變量並檢查它是什麼」是什麼意思?你想知道如何自動化這個? –