簡體   English   中英

Prolog'超出本地堆棧'

[英]Prolog 'Out of Local Stack'

我正在開發一個程序,以解決臭名昭著的難題“農夫,狐狸,鵝和谷物”的更復雜版本,該難題由八個組成部分而不是四個組成部分。 我已經確定了解決方案; 此外,我只寫出了完成問題所需的狀態,如下所示:

move([w,w,w,w,w,w,w,w],[e,w,w,e,w,w,w,w]).
move([e,w,w,e,w,w,w,w],[w,w,w,e,w,w,w,w]).

等等

我現在的目標是使該程序遵循那些狀態,從一個狀態鏈接到另一個狀態,直到達到[e,e,e,e,e,e,e,e]的最終目標。 為此,我將謂詞定義為:

solution([e,e,e,e,e,e,e,e],[]).
solution(Start,End) :-
    move(Start,NextConfig),
    solution(NextConfig,End).

我的查詢是solution([w,w,w,w,w,w,w,w],[e,e,e,e,e,e,e,e]). 但是,這顯然導致無限遞歸。 我想念什么?

為避免循環,請嘗試使用closure0/3

solution(S) :-
   closure0(move, S,[e,e,e,e,e,e,e,e]).

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM