我该如何在Prolog中实现以下规则。
我将“No spiders are mammals”这句话写成存在和全称量词:
¬∃x(mammals(X) ∧ spider(X) ) //It is not the case that mammals are spider
∀X(mammals(X) ⇒ ¬spider(X)) //All mammals are non-spider.
我该如何在Prolog中实现以下规则。
我将“No spiders are mammals”这句话写成存在和全称量词:
¬∃x(mammals(X) ∧ spider(X) ) //It is not the case that mammals are spider
∀X(mammals(X) ⇒ ¬spider(X)) //All mammals are non-spider.
mammals(cat).
mammals(dog).
...
spider(blackwidow).
...
¬∃x(哺乳动物(X)∧ 蜘蛛(X))//不是所有哺乳动物都是蜘蛛
?- \+((mammals(X), spider(X))).
true.
∀X(哺乳动物(X) ⇒ 非蜘蛛(X)) //所有的哺乳动物都不是蜘蛛。
?- forall(mammals(X), \+spider(X)).
true.
no_mammal_is_spider:- \+((mammals(X), spider(X)))
。 - gusbroC(cat).
Mammal(X) :- forall(q(X) V b(X))
最终,我应该回答这个问题:‘cat’是哺乳动物吗??-mammal(cat)
- user2064809forall(mammals(X), ( q(X) ; b(X) ) )。
- gusbro哺乳动物(b).
哺乳动物(q).
forall(哺乳动物(X), ( q(X) ; b(X) ) ).
q(猫).
猫(皮什).
然后我写?- 哺乳动物(皮什)
但是我得到的是false
而不是true
。 - user2064809mammal(pishi)
返回false
是因为你的程序规定只有两个哺乳动物,即b和q,而且它们都是原子。程序中写的forall(...)
应该是一个事实,而不是你想要的结果。 - gusbro