我是Prolog的初学者,遇到了一个我根本无法理解的问题。这是问题:
当我早上起床需要打扮时,我遵循下图所示的规则。这意味着在穿上我的右鞋之前,我需要穿上我的裤子和右袜子,等等。我没有在图表上显示箭头——如果节点 a 和 b 之间有一条线,我假设它从 a 定向到 b 且当 b 在图表中高于 a 时。因此,我之前的图可以被视为关系的有向图。
创建代表哈斯图的事实知识库。在/2 之前使用谓词(Prolog 文献中接受此表示法,表示之前的谓词有两个参数)。
我是Prolog的初学者,遇到了一个我根本无法理解的问题。这是问题:
当我早上起床需要打扮时,我遵循下图所示的规则。这意味着在穿上我的右鞋之前,我需要穿上我的裤子和右袜子,等等。我没有在图表上显示箭头——如果节点 a 和 b 之间有一条线,我假设它从 a 定向到 b 且当 b 在图表中高于 a 时。因此,我之前的图可以被视为关系的有向图。
创建代表哈斯图的事实知识库。在/2 之前使用谓词(Prolog 文献中接受此表示法,表示之前的谓词有两个参数)。
一种编码是:
before(ItemA, ListOfAllItemsYouHaveToWearBeforeItemA).
或者before(ListOfAllItemsYouHaveToWearBeforeItemA,ItemA).
(我认为第一个更好)
所以对于合适的鞋子,你会写
before(right_shoe,[right_sock,pants]).
另一种可能的编码是before(ItemA,ItemYouHaveToWearBeforeItemA).
(或相反)。在这种情况下,您必须编写如下内容:
before(right_shoe,right_sock).
before(right_show,pants).
编码的选择取决于您接下来想要/需要做什么(或任何其他练习要求)。例如,如果您想获得一件物品的要求,第一个编码会更好,而如果您不仅要询问在一件物品之前应该穿什么,而且还想问一件物品之后您可以穿什么,那么第二个编码会更好。
如果我只是要表示图形,我会使用第二种编码,因为两个参数具有相同的类型(图形项)并且它是图形的更直接表示