Prolog查询目标返回False:如何获取公主角色的所有宠物?
帮你解决Prolog查询返回False的问题
嘿,作为刚学Prolog的高中生,遇到这种问题太正常啦!我帮你拆解下问题出在哪,一步步修正:
首先,你的事实定义里有几个拼写错误
这些小疏漏会直接导致Prolog无法正确匹配事实:
charcter_type(jenny, princess)这里少了一个字母a,应该改成character_type(jenny, princess)has_skill(jenny_invisibility)这里漏了逗号,应该是has_skill(jenny, invisibility)(要把角色和技能用逗号分隔开)
然后,你的查询语句逻辑不对
你用的pet(character_type(_, princess), X)是错误的,因为pet事实的第一个参数是角色的名字(比如jim或jenny),而不是character_type这样的结构。
正确的思路是:先找到所有类型为princess的角色,再关联他们的宠物。你可以用两种方式实现:
方式1:直接写查询语句
在Prolog终端里输入:
?- character_type(Princess, princess), pet(Princess, Pet).
这个查询会先匹配character_type(Princess, princess)找到公主角色,再通过pet(Princess, Pet)找到对应的宠物。
方式2:定义一个新的规则(更灵活)
如果你以后经常需要查公主的宠物,可以提前定义规则:
princess_pet(Pet) :- character_type(Princess, princess), pet(Princess, Pet).
之后直接查询?- princess_pet(Pet).就能得到结果。
修正后的完整事实代码
把所有错误修正后,你的事实应该是这样的:
character(jim). character(jenny). character_type(jim, prince). character_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).
现在再运行正确的查询,就能得到结果Princess = jenny, Pet = bird啦!
内容的提问来源于stack exchange,提问作者Malika Musa
相关产品推荐
相关产品推荐

