Prolog目标查询返回False

时间:2018-03-20 05:31:05

标签: prolog

我是一名正在学习Prolog的高中生,并且在目标上遇到错误。

我有以下事实:

character(jim).
character(jenny).
character_type(jim, prince).
charcter_type(jenny, princess).
skill(fly).
skill(invisibility).
has_skill(jim, fly).
has_skill(jenny_invisibility).
pet(jim, horse).
pet(jenny, bird).
animal(horse).
animal(bird).

我想得到所有公主角色的宠物。我在尝试:

pet(character_type(_, princess), X).

没有成功的结果。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:2)

在Prolog中,谓词和函数的参数只能是术语。术语是变量,常量和函数的组合。术语不能包含谓词。谓词是真或假函数的名称。函数是返回非布尔值的函数。

在pet谓词中传递的参数,即character_type是谓词,因此不能写为pet(character_type(_,princess),X)。

而是将查询编写为 character_type(X,princess),pet(X,Y)。会为您提供所需的结果。 X =珍妮 Y =鸟。

答案 1 :(得分:1)

你不能像C-Function那样使用prolog谓词



    character_type(_, princess)

什么都不返回。

我认为这是你打算做的事情。


    character_type(C, princess),pet(C, X).