2015-12-23 30 views
1

使用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). 

这是我想找到该程序

•可鹦鹉飞回答这些问题?
•鹦鹉的颜色是什么?
•鹦鹉是否有皮肤?
•鲨鱼危险吗?

+1

电脑说“不”。程序文本中有语法错误。 – repeat

+0

当我运行这个时,系统中没有错误显示,但有些输出被赋予了错误。例如,鹦鹉飞行是错误的 – Chara

+0

错字:'speacial_organ' vs'special_organ'。 – repeat

回答

3

第一步:定义自反isa/2(以下命名为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. 
    
+0

谢谢你的答案,但为什么鹦鹉可以飞是错误的。鹦鹉是鸟和鸟可以那么为什么它会得到虚假...像副鲨鱼危险也一样 – Chara

+0

@Chara。不要对像“真实”这样的答案太兴奋;返回FALSE。阅读http://stackoverflow.com/questions/5013323/understanding-rules-false-as-answer。 – repeat

+0

但有了这些事实,它将是真的..你可以检查为什么这一切都得到错误 – Chara

相关问题