我正在寻找一种在Prolog中构建表达式树的方法.我已经做了一些实验,并提出了以下工作代码(只处理常量和加号表达式):
const(_).
plus(_, _).
eval(const(R), R).
eval(plus(A, B), R) :- number(A), number(B), R is A+B.
eval(plus(A, B), R) :- number(A), eval(B, B_R), R is A+B_R.
eval(plus(A, B), R) :- eval(A, A_R), number(B), R is A_R+B.
eval(plus(A, B), R) :- eval(A, A_R), eval(B, B_R), R is A_R+B_R.
Run Code Online (Sandbox Code Playgroud)
这种方法有没有更简单的替代方案?我是否必须为我计划添加到程序中的每个操作员定义这4个案例?