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

Prolog原子匹配与合一疑惑:UGC NET 2015真题答案辨析

Prolog UGC NET 2015真题答案解析:father(X,Y)匹配数是2还是0?

我只掌握Prolog基础内容,练习UGC NET 2015年真题时,对father(X,Y)的答案应该是2还是0存在困惑。我理解答案是2,因为变量X匹配了Alice和Thomas,尽管最终没有匹配输出。

题目代码如下:

father(X, Y) :- 
   parent(X, Y), 
   male(X).

parent(Sally, Bob).
parent(Jim, Bob).
parent(Alice, Jane).
parent(Thomas, Jane).
male(Bob).
male(Jim).
female(Salley). % 注意:此处存在拼写错误,应为Sally
female(Alice).

核心解析

你混淆了parent(X,Y)的匹配结果和father(X,Y)的触发条件:

  • father(X,Y)的成立必须同时满足两个规则:parent(X,Y)为真 且 male(X)为真,二者缺一不可。
  • 针对你提到的Alice和Thomas:
    • Alice:parent(Alice,Jane)是成立的,但代码明确定义了female(Alice),所以male(Alice)为假,father(Alice,Jane)不成立。
    • Thomas:parent(Thomas,Jane)成立,但代码里完全没有定义Thomas的性别(既没有male(Thomas)也没有female(Thomas)),Prolog中未声明的谓词默认判定为假,因此male(Thomas)不成立,father(Thomas,Jane)也不成立。
  • 整个代码里,只有father(Jim,Bob)是唯一满足两个条件的实例(parent(Jim,Bob)+male(Jim)均为真)。

如果题目是查询father(X,Jane)的成功匹配数,答案是0;你误以为是2,是只考虑了parent(X,Jane)的匹配结果,忽略了father规则要求的male(X)必要条件。

代码里的额外问题

  • 存在拼写错误:female(Salley)应该改成female(Sally),不过这对Alice和Thomas的判断没有影响。
  • 缺少male(Thomas)的定义,这是导致Thomas无法满足father条件的直接原因。

内容的提问来源于stack exchange,提问作者TestStart

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 04:54:50