2016-02-29 2 views
0

Мне нужно управлять такими переменными.Erlang: Поиск переменной и ее изменение

Сначала найдите переменную и проверьте, что это (в данном случае оператор */+ и т. Д.), А затем отмените его. Например, значение ~ (5 + 9) равно -14 и значение ~ (3-5) равно 2.

Как мне это сделать?

+0

ли вы имеете в виду «свести на нет», а не «реверс»? Это легко выполнить с отрицательным знаком, а не тильдой, и работает для обоих ваших примеров. Поскольку операторы не являются переменными, что вы подразумеваете под «найти переменную и проверить, что это такое»? Вы хотите знать, как автоматизировать это? –

ответ

0
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 
+0

OP не хочет, чтобы F ({5, '+', 9}) возвращался 14. –

+0

Просто протестирован с Erlang 19 - 'F ({5, '+', 9}).' Все еще возвращает 14 – Amiramix

0

Что вы подразумеваете под обращением оператора? Похоже, вы хотели бы сделать обратное - поэтому сложение становится вычитанием и наоборот, а умножение становится делением и наоборот. Но ваши примеры показывают, что вы хотите выполнить операцию, а затем отменить ответ. Например, если бы вы просто «перевернули оператор», тогда 5 + 9 станет 5-9 = -4. Опять же, для получения 5 + 9 = -14 вам придется отрицать ответ операции 5 + 9. Можете ли вы прояснить, прежде чем мы продолжим?

0
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.

Смежные вопросы