我是prolog的新手,我们要求写下以下问题的序言:

如果独角兽是神话,那么它是不朽的,但如果它不是神话,那么它就是一个凡人的哺乳动物 . 如果独角兽是不朽的或哺乳动物,那么它就是有角的 . 如果它是角的话,独角兽是神奇的 .

代码1:

unicorn(immortal):- unicorn(mythical).
(unicorn(immortal), unicorn(mammal)):- unicorn(mythical).
unicorn(horned):- (unicorn(immortal); unicorn(mammal)).
unicorn(magical):- unicorn(horned).

码2:

unicorn(immortal):- unicorn(mythical).
unicorn(mythical):- unicorn(mammal).
unicorn(mythical):- unicorn(immortal).
unicorn(horned):- unicorn(immortal).
unicorn(horned):- unicorn(mammal).
unicorn(magical):- unicorn(horned).

我们需要证明的是证明独角兽是神奇的 . 以下是我的一些尝试,我在linux上成功编译了它们,但是当我运行命令时:

?- unicorn(magical).

他们都返回假 . 我想我不知道如何在prolog中实现“not”,“and”或“or”,我找不到任何关于它们的例子 . 请让我知道我做错了什么 . 谢谢!

更新:阅读评论后,我更新了我的如下:

isimmortal(unicorn):- ismythical(unicorn).
ismammal(unicorn):- \+ ismythical(unicorn).
ishorned(unicorn):- isimmortal(unicorn); ismammal(unicorn).
ismagical(unicorn):- ishorned(unicorn).

这段代码通过我一个例外,它是:

uncaught exception: error(existence_error(procedure,ismythical/1),isimmortal/1)

我不知道它有什么问题 .