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

为给定值列表和给定结果Prolog生成算术表达式字符串,prolog,arithmetic-expressions,Prolog,Arithmetic Expressions,我有以下问题。我需要写一个程序,在Prolog中为给定的列表和结果值生成算术表达式。例如,如果我运行这样的->“expr([1,2],3,X)。”它应该给我结果X=1+23是我正在寻找的表达式的结果。我写了几行代码,结果总是出错。我的代码如下(已更新): 我做错了什么? 有没有更好的办法解决我的问题 提前感谢您的回答。一个问题是[头部,X,尾部]。这是一个包含三个元素的列表。你是说它是一个列表,前两个元素是Head和X,然后是tail,tail?那将是[头,X |尾]。这个查询,expr([1,

我有以下问题。我需要写一个程序,在Prolog中为给定的列表和结果值生成算术表达式。例如,如果我运行这样的->“expr([1,2],3,X)。”它应该给我结果X=1+2<这个查询中的code>3是我正在寻找的表达式的结果。我写了几行代码,结果总是出错。我的代码如下(已更新):

我做错了什么? 有没有更好的办法解决我的问题


提前感谢您的回答。

一个问题是
[头部,X,尾部]
。这是一个包含三个元素的列表。你是说它是一个列表,前两个元素是
Head
X
,然后是tail,
tail
?那将是
[头,X |尾]
。这个查询,
expr([1,2],3,X)是什么意思?你是说结果是
X=1+2
。如果我查询,
expr([1,2],2,X)。
?它是否应该产生
X=1*2
(某些使用
1
2
的操作会产生
2
?现在有点不清楚你希望它如何整体工作。是的,我想得到一些像你写的东西。查询
expr([1,2],3,X)。
表示我正在寻找满足
1 expr 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.