我尝试了一本书中的基本示例,它使“超出本地堆栈”错误(我会在代码后告诉更多)。 这里是代码:Prolog超出本地堆栈错误
edge(a,b).
edge(a,e).
edge(b,d).
edge(b,c).
edge(c,a).
edge(e,b).
tedge(Node1,Node2) :-
edge(Node1,SomeNode),
edge(SomeNode,Node2).
edge(X,Y) :- tedge(X,Y).
我试图例如写查询边缘(A,B),并且它返回真,然后输入我“;”它发生了错误。 这里有什么问题?
简短的答案是,它进入无限递归。如果你做一个“跟踪”,你会看到发生了什么。你为什么定义了边(X,Y): - Tedge(X,Y)。它必然会创建一个循环场景,因为'edge/2'还定义了'tedge/2'引用的事实。只要把它留在'tedge/2'并且查询'tedge(a,b).'。 – lurker