答案 0 :(得分:3)
谓词move/2
采用state/4 in
形式的参数来实现问题状态。在州,第一个参数用于农民,第二个用于狼,第三个用于山羊,第四个用于卷心菜。状态的每个参数变量应该得到值e(对于东)或w(对于西)。
为了解决这个问题,您可以定义move(state(F1,W1,G1,C1),state(F2,W2,G2,C2)):-...
形式的子句,类似于图片中的子句。
图片中显示的谓词用于当农夫和狼都在同一侧时,所以在输入状态下,两个第一个变量是共同的(state(X,X,G,C))
并且想要在相反的一侧移动所以意志转到state(Y,Y,G,C)
,其中opp(X,Y)
为真,这意味着如果X是e,则农民和世界将转移到w,反之亦然。上面的举动是有效的,因为你已经实施了以前的动作,使得农民和狼不能在同一侧,同时山羊和卷心菜也在同一侧(山羊会吃白菜),所以之前的一系列动作,因为它是有效的农民和狼可以在同一侧,白菜和山羊将在对面。