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

SWI-Prolog中如何让OR规则返回触发的具体谓词?

解决方案

你可以通过修改parent规则,在每个分支中绑定变量来记录触发的谓词,具体实现如下:

改写后的代码

father(a, b).
mother(a, c).

% 将parent扩展为三个参数,第三个参数R用于返回触发的谓词
parent(A, X, R) :- father(A, X), R = father.
parent(A, X, R) :- mother(A, X), R = mother.

查询及结果

执行查询:

?- parent(a, X, R).

会得到预期输出:

X = b, R = father ;
X = c, R = mother.

说明

把原规则的析取分支拆分为两个独立规则,每个规则在匹配对应父/母事实后,将谓词名(father或mother)赋值给变量R,这样查询时就能同时获取子节点和触发的谓词类型。如果偏好保持析取写法,也可以合并为单条规则:

parent(A, X, R) :- (father(A, X), R = father) ; (mother(A, X), R = mother).

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 20:05:17