List prolog中列表元素的算术运算
我在Prolog中得到了这个任务,我不知道如何处理它 我必须编写谓词List prolog中列表元素的算术运算,list,recursion,prolog,expression,List,Recursion,Prolog,Expression,我在Prolog中得到了这个任务,我不知道如何处理它 我必须编写谓词表达式(列表、结果、结果),它使用List中的每个元素构建一个算术表达式。它给出了一个结果,在回溯之前,该结果必须等于结果 例如: ?- expression([1, 2, 3, 4], 2, X). X = 1+ (2+ (3-4)) 或 我试过这样的方法: operation(A, B, A + B). operation(A, B, A - B). operation(A, B, A * B). operation(A,
表达式(列表、结果、结果)
,它使用List
中的每个元素构建一个算术表达式。它给出了一个结果
,在回溯之前,该结果必须等于结果
例如:
?- expression([1, 2, 3, 4], 2, X).
X = 1+ (2+ (3-4))
或
我试过这样的方法:
operation(A, B, A + B).
operation(A, B, A - B).
operation(A, B, A * B).
operation(A, B, A div B).
expression([],_,_).
expression([A,B,D|List],Outcome,Result) :-
operation(A,B,C),
operation(C,D,Result),
Outcome is Result.
这适用于三个元素的列表,但我想对不同大小的列表使用它。我想我必须使用递归,但是如何使用呢?如何添加使用括号的可能性?每个表达式都是一棵树。它的叶子的边缘总是相同的列表-给定的第一个参数。它的结构反映了括号。然后,对于每棵树,当“从上面看”时,其节点形成一个算术二进制运算符列表。对于每个树,需要考虑这些运算符的所有组合。
表达式(列表、结果、Xpr):-
树(列表,T,节点),列表中有%N个ELT,节点中有N-1个
组合(节点、[+、-、*、/])、%或任何您想要使用的操作
评估(T,结果),
括号内(T,Xpr)。
组合(节点、操作):-%使用_模块(库(lambda))。
映射列表(\X^(成员(X,Ops)),节点)。
剩下的就是实现剩下的东西。每个表达式都是一棵树。它的叶子的边缘总是相同的列表-给定的第一个参数。它的结构反映了括号。然后,对于每棵树,当“从上面看”时,其节点形成一个算术二进制运算符列表。对于每个树,需要考虑这些运算符的所有组合。
表达式(列表、结果、Xpr):-
树(列表,T,节点),列表中有%N个ELT,节点中有N-1个
组合(节点、[+、-、*、/])、%或任何您想要使用的操作
评估(T,结果),
括号内(T,Xpr)。
组合(节点、操作):-%使用_模块(库(lambda))。
映射列表(\X^(成员(X,Ops)),节点)。
剩下的就是实现剩下的东西
operation(A, B, A + B).
operation(A, B, A - B).
operation(A, B, A * B).
operation(A, B, A div B).
expression([],_,_).
expression([A,B,D|List],Outcome,Result) :-
operation(A,B,C),
operation(C,D,Result),
Outcome is Result.