Prolog递归和堆栈问题

Prolog recursion and stack issue

我正在尝试在序言中测试递归。基于下面的 KB 和条件语句,我尝试进行递归调用并想使用专门用于 "eastOf(X,Y) :- westOf(X,Z),eastOf(Z,Y)" 的查询我正在使用的查询是 "eastOf(ave,yonge)" 应该使用该递归调用并声明 X是 ave,Y 是 yonge,Z 是 collegePark。但是,我正在使用当前 (ECliPSe) 的 proglog 程序给我这个错误“*** local/control 堆栈溢出! 您可以使用“-l kBytes”(LOCALSIZE) 选项来获得更大的堆栈。 峰值大小为:本地堆栈 11024 KB,控制堆栈 120048 KB

在我的 .pl 文件下面找到

eastOf(collegePark,yonge).
eastOf(sushi,eaton).
eastOf(X,Y) :- westOf(Y,X). 
eastOf(X,Y) :- westOf(X,Z), eastOf(Z,Y).

westOf(ellington,yonge). 
westOf(ryerson,sushi).
westOf(ave,collegePark).
westOf(X,Y) :- eastOf(Y,X).
westOf(X,Y) :- eastOf(X,Z), westOf(Z,Y).

我认为您打算使用 eastOf(yonge,collegePark) 作为您的第一个声明。现在它永远找不到以 'ave' 或 'yonge' 开头的原子语句,并在 eastOf(X,Y) :- westOf(Y,X)westOf(X,Y) :- eastOf(Y,X) 之间循环。

eastOf(X,Y) :- westOf(Y,X).

westOf(X,Y) :- eastOf(Y,X).

这两个谓词的组合发生了死循环。 即使堆栈大小很大,也会发生大小溢出。 我把你的程序改成如下。

eastOf_data(collegePark,yonge).
eastOf_data(sushi,eaton).
eastOf(X,Y) :- westOf_data(Y,X). 
eastOf(X,Y) :- westOf_data(X,Z), eastOf_data(Z,Y).

westOf_data(ellington,yonge). 
westOf_data(ryerson,sushi).
westOf_data(ave,collegePark).
westOf(X,Y) :- eastOf_data(Y,X).
westOf(X,Y) :- eastOf_data(X,Z), westOf_data(Z,Y).