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