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