Prolog-Farmer Wolf Goat Cabbage中的谓词微积分

时间:2017-03-23 06:56:40

标签: prolog river-crossing-puzzle

我从人工智能中的经典农民狼山羊白菜问题中得到了这个含义

enter image description here

教科书说,当农夫和狼在河的两边时,这条规则就开始了。我无法理解这部分含义是什么'

这是什么意思?

1 个答案:

答案 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,反之亦然。上面的举动是有效的,因为你已经实施了以前的动作,使得农民和狼不能在同一侧,同时山羊和卷心菜也在同一侧(山羊会吃白菜),所以之前的一系列动作,因为它是有效的农民和狼可以在同一侧,白菜和山羊将在对面。