【发布时间】:2015-04-27 08:19:46
【问题描述】:
我正在尝试计算这个输入:
评估({mul,{plus,{num,2},{num,3}},{num,4}})。
并得到这个答案:
20
但我不能让它工作,这是我的代码:
evaluate(List) ->
[Res] = lists:foldl(fun evaluate/2, [], tuple_to_list(List)),
Res.
evaluate({num,X},Stack) -> [X|Stack];
evaluate(plus,[N1,N2|Stack])->[N1+N2|Stack];
evaluate(mul,[N1,N2|Stack])->[N1*N2|Stack];
evaluate([{Optr, Num1, Num2}],Stack) ->
evaluate(Num1,Stack),evaluate(Num2,Stack),evaluate(Optr,Stack).
你能指出我的错误并纠正我吗,谢谢。
【问题讨论】:
-
和以前一样的问题,你有元组的元组而不是一个列表来操作。这直接违背了函数式语言的工作原理。至少你会想要
[mul, [plus, 2, 3], 4]或类似的东西,而不是等效结构的元组。如果你这样做,你实际上是在创建一个 S 表达式评估器(几乎就像一个 lisp 解释器)。 -
反正没有用 tuple_to_list 改变它的格式
-
当然,还有一种用水翼游过太平洋的方法。但我宁愿买一个新的交通工具也不愿独自对抗大自然的潮流。
标签: erlang evaluation