1

我有一组一阶逻辑中的真实语句和条件语句,我想使用 prolog 来解决。但是,我无法优雅地表达我的事实和条件。

例如,假设我想表达以下内容:

He drinks tea.
she does not drink tea if he does not drink tea.
either she likes soda or tea but not both
if she likes soda then he does not like tea.

以上是一个愚蠢的例子,我对逻辑推理感兴趣。我有兴趣直接翻译成序言,这样我们就可以开始推理了。这是我的尝试:

Drink_Tea(He).
/* I can't seem to find a not operator, so I'll use !*/
!Drink_Tea(She) :- !Drink_Tea(He).
likes(Soda, She) ; likes(tea, She) , !likes(Soda, She) , !likes(Tea, She).
!likes(Tea, He) :- likes(Soda, She).

非常感谢所有帮助!如果您需要更多信息,请与我们联系。

编辑: 在序言文件中,为什么我不能写“事实”,例如not(p) ; not(q)变量pq

4

1 回答 1

0

Clocksin 和 Mellish Prolog 一书描述了一种将逻辑命题翻译成合取范式的子句,这可能有用或至少给你一些想法。我有一个部分基于您可以使用的翻译器的 Logtalk 示例:

Logtalk 示例

于 2013-08-19T14:18:37.187 回答