Prolog-Farmer Wolf Goat Cabbage 中的谓词演算

Predicate Calculus in Prolog-Farmer Wolf Goat Cabbage

我从人工智能中经典的农夫狼山羊白菜问题中得到了这个启示

教科书上说,当农夫和狼在river.I的对立面无法理解'if part of the implication'

时,此规则起作用

这是什么意思?

谓词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,则 farmer 和 wold 都将移至 w,反之亦然。上面的移动是有效的,因为你已经实现了之前的移动,这样农夫和狼不能在同一侧,同时山羊和卷心菜也在同一侧(山羊会吃卷心菜),所以之前的移动序列因为它是有效的农夫和狼可以在同一边,卷心菜和山羊可以在另一边。