作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
根据大学硬件的需要,我需要将一些 Horn 子句转换为 Prolog,但我不知道该怎么做。我找到了一些指南,但他们仅用一个事实描述了如何做到这一点。那么您能给我一个简短的例子来说明如何做到这一点吗?
例如约翰既美丽又富有
我们可以将其转换为: not (Beautiful(John)) ^ not(Rich(John)) 这是一个 Horn 子句,对吗?那么这怎么能翻译成Prolog呢?
另一个例子每个人都爱某人。 Horn 子句:∀X∃YLoves(X,Y) 这如何在 Prolog 中实现?
提前致谢
最佳答案
对于你的第一个问题
john :- beautiful, rich.
或者有类似的东西:
beautiful(john).
rich(john).
带有查询:
beautiful(X),rich(X).
基本上,序言中的每条规则都是一个喇叭子句。根据定义,逻辑程序是由 Horn 子句组成的程序。在序言中,当您有一个规则声明为:
a1(X):-a2(X),a3(X),...,an(X)
是一个喇叭子句,因为它被翻译为:
a1 or not a2 or not a3 or ... or not an
所以对于你的第二个问题:在序言中,当您定义规则时,就隐含了全称量词,因此它确实如此不影响 prolog 子句。所以你需要否定你的句子,这样你就可以改变存在量词到一个通用的。所以,你有:
∀X∃YLoves(X,Y)
然后你否定:
∀X ∀Y false <- Loves(X,Y))
翻译成:
:- loves(X,Y).
关于prolog - 序言中的霍恩条款,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22439171/
我是一名优秀的程序员,十分优秀!