我有一个评估函数(expr_eval / 1),它应该评估一个 表达并返回一个 数。到目前为止,我的函数返回的公式的有效数字如下:
expr_eval({plus,{num, 17},{num,10}}) → 27
但不是这样:
expr_eval({mul,{plus,{num,5},{num,8}},{num,3}}) → 39
我的功能:
expr_eval({mul, {num,A}, {num,B}}) ->A*B;
expr_eval({plus, {num,A}, {num,B}}) ->A+B;
expr_eval({minus, {num,A},{num,B}}) ->A-B;
expr_eval({_,_,_})->nothing_matched.
我知道它只是采用了模式,但我该如何解决这个问题呢?我可以硬编码并将下面的代码添加到我的函数中,上面的方程式可以正常工作,但它不适用于其他方程式。(例如expr_eval({minus,{plus,{num,5},{num ,8}},{num,3}})→8)
expr_eval({mul, {plus,{num,A},{num,B}},{num,C}}) ->(A+B)*C;
答案 0 :(得分:5)
我相信它必须是递归函数,比如
expr({num,X}) -> X;
expr({plus, X, Y}) -> expr(X) + expr(Y);
expr({minus, X, Y}) -> expr(X) - expr(Y);
expr({mul,X, Y}) -> expr(X)*expr(Y);
expr(Any) -> io:format("Dont know what to do with ~p~n",[Any]).