Prolog目标查询返回False

Prolog目标查询返回False,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). a

我是一名学习序言的高中生,在一个目标上犯了一个错误

我有以下事实:

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

没有成功的结果。非常感谢您的帮助。

您不能像C函数一样使用prolog谓词



    character_type(_, princess)

不返回任何内容

我想这就是你打算做的


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


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

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

而是将查询编写为 角色类型(X,公主),宠物(X,Y)。将为您提供所需的结果。 X=jenny
Y=鸟

术语是变量、常数和函数的组合。。Prolog没有“函数”。谓词不是函数。Prolog中的所有内容都是一个术语,谓词是一组术语,其形式为:
:-(head,body)
,通常写为,
head:-body
,其中
head
body
也是术语形式。谓词成功或失败,不“返回”值。在Prolog中,任何以小写字母开头的内容都是原子的,而不是变量。所以
pet(字符类型(u,公主),X)。
失败,因为您拥有的两个
pet
事实都不会与该术语统一。它们不会统一,因为
jim
字符类型(\uu,公主)
不匹配,
jenny
字符类型(\uu,公主)
不匹配。