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
相关产品推荐
相关产品推荐

