[英]Prolog recursion and stack issue
我正在尝试在序言中测试递归。 根据下面的KB和条件语句,我尝试进行递归调用,并希望将其专门用于“ eastOf(X,Y):-westOf(X,Z),eastOf(Z,Y)”查询I我正在使用的是“ eastOf(ave,yonge)”,它应该使用该递归调用,并声明X为ave,Y为yonge和Z为collegePark。 但是,我使用的当前proglog程序(ECliPSe)会给我这个错误“ ***本地/控制堆栈溢出!您可以使用“ -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).
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.