为给定的值列表生成算术表达式字符串并给出结果Prolog

时间:2016-04-05 20:30:33

标签: prolog arithmetic-expressions

我有以下问题。我需要在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.

我做错了什么? 对我的问题有更好的解决方案吗?

提前感谢您的回答。

0 个答案:

没有答案