繁体   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