我有以下问题。我需要在Prolog中编写为给定列表和结果值生成算术表达式的程序。例如,如果我运行这样的东西 - > “EXPR([1,2],3,X)”。它应该给我结果X = 1 + 2。此查询中的3
是我正在寻找的表达式的结果。我写了一些代码行,结果总是假的。我的代码低于(更新):
expr([X], _, Expr, Val2):-
integer(X),
append(X,"",Expr),
Val2 is X.
expr([X|Tail], Val, Expr, Val2) :-
expr(Tail, Val, Expr1, N),
\+ N = 0,
Val2 is X / N,
append("(", Expr1, Expr2),
append(Expr2, ")", Expr3),
append("/", Expr3, Expr4),
append(X, Expr4, Expr).
expr([X|Tail], Val, Expr, Val2) :-
expr(Tail, Val, Expr1, N),
Val2 is X * N,
append("(", Expr1, Expr2),
append(Expr2, ")", Expr3),
append("*", Expr3, Expr4),
append(X, Expr4, Expr).
expr([X|Tail], Val, Expr, Val2) :-
expr(Tail, Val, Expr1, N),
Val2 is X - N,
append("(", Expr1, Expr2),
append(Expr2, ")", Expr3),
append("-", Expr3, Expr4),
append(X, Expr4, Expr).
expr([X|Tail], Val, Expr, Val2) :-
expr(Tail, Val, Expr1, N),
Val2 is X + N,
append("(", Expr1, Expr2),
append(Expr2, ")", Expr3),
append("+", Expr3, Expr4),
append(X, Expr4, Expr).
expr(X, Val, Expr) :-
permutation(X,Perm),
expr(Perm,Val,Expr,N),
N = Val.
我做错了什么? 对我的问题有更好的解决方案吗?
提前感谢您的回答。