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