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,公主)
不匹配。