gpt4 book ai didi

prolog - 查找与原子相关的所有子句

转载 作者:行者123 更新时间:2023-12-01 13:47:12 25 4
gpt4 key购买 nike

这可能是一个非常愚蠢的问题(我几个小时前才开始学习 Prolog),但是有没有可能找到与一个原子相关的所有子句?例如,假设有以下知识库:

cat(tom).
animal(X) :- cat(X).

,有没有办法获取关于 tom 的所有可能信息(或者至少是 base 中明确陈述的所有事实)?我知道这样的查询是不可能的:

?- Pred(tom).

所以我想我可以写一个规则来推断出正确的信息:

meta(Object, Predicate) :-
Goal =.. [Predicate, Object],
call(Goal).

这样我就可以编写查询

?- meta(tom, Predicate).

但这不起作用,因为 call 的参数没有充分实例化。所以基本上我的问题是:这是否可能,或者 Prolog 不是设计来提供这种信息的?如果不可能,为什么?

最佳答案

您可以使用 ISO 谓词“current_predicate/1”来找出您可以调用的内容。这是一个示例程序:

cat(tom).animal(X) :- cat(X).info(Arg,Info) :- current_predicate(PredName/1),     Info =.. [PredName,Arg], call(Info).all_info(Arg,L) :- findall(I,info(Arg,I),L).

您可以按如下方式使用该程序(顺便说一句,我正在使用 SICStus Prolog):

| ?- info(tom,X).X = animal(tom) ? ;X = cat(tom) ? ;no| ?- all_info(tom,X).X = [animal(tom),cat(tom)] ? yes

一般可以用

current_predicate
如下:

| ?- current_predicate(X).X = info/2 ? ;X = animal/1 ? ;X = cat/1 ? ;X = all_info/2 ? ;no

关于prolog - 查找与原子相关的所有子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2717508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com