我正在开发一个程序来解决臭名昭著的谜题“农民、狐狸、鹅和谷物”的更复杂版本,它有八个组成部分而不是四个。我已经确定了解决方案;另外,我只写出了完成问题的必要状态,如下所示:
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]).
但是,这显然会导致无限递归。我错过了什么?