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

这是我想从这个程序中找到答案的问题

• 鹦鹉会飞吗?
• 鹦鹉的颜色是什么?
• 鹦鹉有皮肤吗?
• 鲨鱼危险吗?

4

1 回答 1

3

第一步:定义(命名如下)的自反isa/2is_a/2

ISA(鱼,动物)。
ISA(鸟,动物)。
ISA(哺乳动物,动物)。
ISA(鲨鱼,鱼)。
伊萨(鲑鱼,鱼)。
伊萨(鹦鹉,鸟)。
ISA(企鹅,鸟)。

is_a(X, Y) :-
   闭包0(isa,X,Y)。

第二步:指定剩余的事实(按谓词指示符分组)。

封面(动物,皮肤)。

special_organ(鱼,鳃)。
special_organ(鸟,翅膀)。

旅行(鱼,游泳)。
旅行(鸟,飞)。
旅行(企鹅,步行)。

出生(鸟,lay_eggs)。
出生(鱼,lay_eggs)。
出生(哺乳动物,not_lay_eggs)。
出生(鲨鱼,not_lay_eggs)。

性质(鲨鱼,危险)。

食物(鲑鱼,美味)。

颜色(鹦鹉,绿色)。

第三步:让我们问一些问题!

  • 鹦鹉会飞吗?

    ?- is_a(鹦鹉,X),旅行(X,飞)。
       X = 鸟
    ; 错误的。
    
  • 鹦鹉的颜色是什么?

    ?- is_a(鹦鹉,X),颜色(X,颜色)。
       颜色 = 绿色,X = 鹦鹉         
    ; 错误的。
    
  • 鹦鹉有皮肤吗?

    ?- is_a(鹦鹉,X),封面(X,皮肤)。
       X = 动物
    ; 错误的。
    
  • 鲨鱼危险吗?

    ?- is_a(鲨鱼,X),自然(X,危险)。
       X = 鲨鱼
    ; 错误的。
    
于 2015-12-23T10:20:21.950 回答