Prolog:如何检查谓词是否存在? [英] Prolog: How to check if a predicate exists?

查看:52
本文介绍了Prolog:如何检查谓词是否存在?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何检查 Prolog 程序中是否存在谓词?那将是一个 exists/1,例如:

How can I check if a predicate exists in a Prolog program? That would be an exists/1, like:

?- exists(some_predicate).
false.

?- assert(some_predicate).
true.

?- exists(some_predicate).
true.

推荐答案

您可以使用 current_predicate/1current_predicate/2predicate_property/2(最后你可能需要functor/3):

You can use current_predicate/1, current_predicate/2 or predicate_property/2 (for the last you will probably need functor/3):

?- current_predicate(a/1).
false.

?- functor(A,a,1),predicate_property(A,visible).
false.

?- functor(A,a,1),current_predicate(_,A).
false.

?- assert(a(42)).
true.

?- current_predicate(a/1).
true.

?- functor(A,a,1),predicate_property(A,visible).
A = a(_G136).

?- functor(A,a,1),current_predicate(_,A).
A = a(_G122).

current_predicate/2predicate_property/2(带可见)成功,如果谓词可以自动加载而 currrent_predicate/1 失败

current_predicate/2 and predicate_property/2 (with visible) succeeds if the predicate can be autoloaded while currrent_predicate/1 fails

这篇关于Prolog:如何检查谓词是否存在?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆