结果没有与给定的事实进行比较
Results are not compareing with given facts
使用 prolog 编写代码来获得一些比较输出,但有些输出无法正常工作。似乎那些与事实不符。这里是代码
fact(Fact) :- Fact,!.
fact(Fact):-Fact = ..[Rel, Arg1, Arg2],isa(Arg1, SuperArg).
SuperFact =..[Rel,SuperArg,Arg2].
covers(animal,skin).
isa(fish,animal).
isa(bird,animal).
isa(mammal,animal).
isa(shark,fish).
isa(salmon,fish).
isa(parrot,bird).
isa(penguin,bird).
speacial_organ(fish,gills).
travel(fish,swim).
birth(bird,lay_eggs).
special_organ(bird,wings).
travel(bird,fly).
birth(fish,lay_eggs).
birth(mammal,not_lay_eggs).
birth(shark,not_lay_eggs).
nature(shark,dangerous).
food(salmon,delicacy).
colour(parrot,green).
travel(penguin,walk).
这是我想从这个程序中找到答案的问题
• 鹦鹉会飞吗?
• 鹦鹉是什么颜色的?
• 鹦鹉有皮吗?
• 鲨鱼危险吗?
第一步:定义isa/2
的自反transitive-closure(以下命名为is_a/2
)
isa(fish,animal).
isa(bird,animal).
isa(mammal,animal).
isa(shark,fish).
isa(salmon,fish).
isa(parrot,bird).
isa(penguin,bird).
is_a(X, Y) :-
closure0(isa, X, Y).
第二步:指定剩余的事实(按谓词指示符分组)。
covers(animal,skin).
special_organ(fish,gills).
special_organ(bird,wings).
travel(fish,swim).
travel(bird,fly).
travel(penguin,walk).
birth(bird,lay_eggs).
birth(fish,lay_eggs).
birth(mammal,not_lay_eggs).
birth(shark,not_lay_eggs).
nature(shark,dangerous).
food(salmon,delicacy).
colour(parrot,green).
第三步:让我们提出一些问题!
Can parrots fly?
?- is_a(parrot, X), travel(X, fly).
X = bird
; false.
What is the color of parrots?
?- is_a(parrot, X), colour(X, Colour).
Colour = green, X = parrot
; false.
Do parrots have skin?
?- is_a(parrot, X), covers(X, skin).
X = animal
; false.
Are sharks dangerous?
?- is_a(shark, X), nature(X, dangerous).
X = shark
; false.
使用 prolog 编写代码来获得一些比较输出,但有些输出无法正常工作。似乎那些与事实不符。这里是代码
fact(Fact) :- Fact,!.
fact(Fact):-Fact = ..[Rel, Arg1, Arg2],isa(Arg1, SuperArg).
SuperFact =..[Rel,SuperArg,Arg2].
covers(animal,skin).
isa(fish,animal).
isa(bird,animal).
isa(mammal,animal).
isa(shark,fish).
isa(salmon,fish).
isa(parrot,bird).
isa(penguin,bird).
speacial_organ(fish,gills).
travel(fish,swim).
birth(bird,lay_eggs).
special_organ(bird,wings).
travel(bird,fly).
birth(fish,lay_eggs).
birth(mammal,not_lay_eggs).
birth(shark,not_lay_eggs).
nature(shark,dangerous).
food(salmon,delicacy).
colour(parrot,green).
travel(penguin,walk).
这是我想从这个程序中找到答案的问题
• 鹦鹉会飞吗?
• 鹦鹉是什么颜色的?
• 鹦鹉有皮吗?
• 鲨鱼危险吗?
第一步:定义isa/2
的自反transitive-closure(以下命名为is_a/2
)
isa(fish,animal). isa(bird,animal). isa(mammal,animal). isa(shark,fish). isa(salmon,fish). isa(parrot,bird). isa(penguin,bird). is_a(X, Y) :- closure0(isa, X, Y).
第二步:指定剩余的事实(按谓词指示符分组)。
covers(animal,skin). special_organ(fish,gills). special_organ(bird,wings). travel(fish,swim). travel(bird,fly). travel(penguin,walk). birth(bird,lay_eggs). birth(fish,lay_eggs). birth(mammal,not_lay_eggs). birth(shark,not_lay_eggs). nature(shark,dangerous). food(salmon,delicacy). colour(parrot,green).
第三步:让我们提出一些问题!
Can parrots fly?
?- is_a(parrot, X), travel(X, fly). X = bird ; false.
What is the color of parrots?
?- is_a(parrot, X), colour(X, Colour). Colour = green, X = parrot ; false.
Do parrots have skin?
?- is_a(parrot, X), covers(X, skin). X = animal ; false.
Are sharks dangerous?
?- is_a(shark, X), nature(X, dangerous). X = shark ; false.