我是一名正在学习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).
没有成功的结果。任何帮助表示赞赏。
答案 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).