我正在阅读Pereira和Shieber的书《Prolog and Natural-Language Analysis》(pdf),其中有一个问题2.7的备注让我卡住了,它说:
在语义网络表示中,我们经常想问[...]“Ford和公司类之间存在什么关系?”
修改您的语义网络表示,以允许这种新类型的问题和前面问题中的问题。提示:将语义网络关系视为Prolog个体。这是一种重要的Prolog编程技术,有时在哲学圈中称为具体化。
我不熟悉这种具体化技术。
好的,让我们假设这个事实和规则的数据库:
isa('Ole Black', 'Mustangs').
isa('Lizzy', 'Automobiles').
isa('Ford','Companies').
isa('GM','Companies').
isa('1968','Dates').
ako('Model T', 'Automobiles').
ako('Mustangs', 'Automobiles').
ako('Companies', 'Legal Persons').
ako('Humans', 'Legal Persons').
ako('Humans', 'Physical Objects').
ako('Automobiles', 'Physical Objects').
ako('Legal Persons', 'Universal').
ako('Dates', 'Universal').
ako('Physical Objects', 'Universal').
have_mass('Physical Objects').
self_propelled('Automobiles').
company(X) :- isa(X,'Companies').
legal_persons(X) :- ako(X,'Legal Persons').
如何编写一个查询,在上面的代码中找到
'Ford'
和'Companies'
之间的关系是isa
?
当然,我可以像这样写一些东西:fact(isa, 'Ford','Companies').
我想查询?- fact(X, 'Ford','Companies').
,但是我不认为这是正确的方法。
有人能解释一下如何正确地查询吗?
forall(fact(X, 'Ford', 'Companies'), writeln(X))
。 - jcsahnwaldt Reinstate Monica