我决定学习基本的Prolog,因为它的想法似乎很有趣。语言本身很难让我理解。
作为一个练习,我决定尝试制作一个简单的程序来解决骑士/ knave /村民谜题。作为一个基地,我采取了解决骑士/咒语拼图的程序,并试图修改它以满足我的需要。拼图规则众所周知
因此,在我所依赖的程序中,代码中存在以下两个最重要的规则:
said(knight, X) :- true(X)
said(knave, X) :- false(X)
这很容易。如果有什么事情是真的,那就是一个说出来的骑士。如果它是假的,那就是一个说话的人。但另一个结论是什么,即是一个村民谁说X?
我试过了:
said(villager, X) :- true(X); false(X)
但我认为这意味着"如果X无论是真还是假,一个村民都说'#34;,这不是我想要的。
我怎么说"如果某些事情属实,无论是村民还是骑士都说过" (和假/ knave一样)在Prolog中?我想我必须修改前两行,但是怎么做?
答案 0 :(得分:1)
您只需添加said(villager,X) :- true(X)
作为新事实;你不需要修改原始事实(因为它们仍然是真的)。然后,您可以添加said(villager,X) :- false(X)
。这一切都与你原来的一样。
这似乎符合#34;村民有时会说出真相,有时候并没有"?根据陈述的真实性,你似乎没有依据告诉村民是否说出来;你所能做的只是告诉他们能否说出来。