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