You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:52:06