繁体   English   中英

Prolog递归和堆栈问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM