簡體   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