Error handling Prolog程序出全局堆栈错误
我正在尝试一个定理证明程序。但第4条规则似乎执行得很糟糕Error handling Prolog程序出全局堆栈错误,error-handling,prolog,out-of-memory,proof,Error Handling,Prolog,Out Of Memory,Proof,我正在尝试一个定理证明程序。但第4条规则似乎执行得很糟糕 % delete del(X, [X | Tail], Tail). del(X, [Y | Tail], [Y | Tail1]) :- del(X, Tail, Tail1). % remove remove(X, Y, L1, L2) :- del(X, L1, L3), del(Y, L3, L2). % prove prove(true). prove([L1 seq L2]) :- seq
% delete
del(X, [X | Tail], Tail).
del(X, [Y | Tail], [Y | Tail1]) :-
del(X, Tail, Tail1).
% remove
remove(X, Y, L1, L2) :-
del(X, L1, L3),
del(Y, L3, L2).
% prove
prove(true).
prove([L1 seq L2]) :-
seq(L1, L2),
!.
% Rule 1
seq(L1, L2) :-
member(X, L1),
member(X, L2),
!.
% Rule 4
seq(L1, L2) :-
Z = or(X, Y),
del(Z, L2, L4),
remove(X, Y, L3, L4),
seq(L1, L3).
证明[[p]顺序[q]]。-生成false,这是正确的。
证明[[p]顺序[q,r]]。-生成错误的、正确的。
但证明[[p]序列[q或r]]。-超出全局堆栈。那么我认为规则4有问题。
你知道怎么解决这个问题吗?非常感谢。在规则4中,我只能告诉你 将Z设置为或的模板 尝试从L2中删除该模板,这样L4就被留下了,模板X和Y的组件被填充, 找到一个L3,从中可以拆下or的部件,从而得到L4, 然后你试着用L3而不是L2来解决这个问题
但这意味着L3不一定在终止方面取得任何进展。请告诉我您的整个计划好吗?我只是看到你需要seq的操作员声明