Prolog 理解子句/2谓词

Prolog 理解子句/2谓词,prolog,clause,Prolog,Clause,我目前正在尝试学习一些Prolog(使用ECLiPSe)。有时我会遇到子句/2谓词,但我不理解它的用途。我读了一些参考资料(例如),但我仍然不知道在什么情况下它会有用。有人能给我一个简单的例子或解释吗?这个谓词允许元编程,即对Prolog程序进行推理 SWI Prolog在a.o.explain谓词中使用子句/2: ?- explain(member). "member" is an atom Referenced from 12-th clause of pce_meta:pc

我目前正在尝试学习一些Prolog(使用ECLiPSe)。有时我会遇到子句/2谓词,但我不理解它的用途。我读了一些参考资料(例如),但我仍然不知道在什么情况下它会有用。有人能给我一个简单的例子或解释吗?

这个谓词允许元编程,即对Prolog程序进行推理

SWI Prolog在a.o.
explain
谓词中使用
子句/2

?- explain(member).
"member" is an atom
        Referenced from 12-th clause of pce_meta:pce_to_pl_type/3
lists:member/2 is a predicate defined in
        c:/program files/swi-prolog/library/lists.pl:81
        Referenced from 1-th clause of prolog_dialect:source_exports/2
        Referenced from 1-th clause of pce_config:term_description/2
        Referenced from 1-th clause of pce_config:config_attribute/2
        Referenced from 1-th clause of pce_config:load_config_key/2
        Referenced from 1-th clause of pce_config:term_description/3
        Referenced from 1-th clause of pce_config:current_config_path/1
        Referenced from 4-th clause of persistent_frame:has_specifier/1
true.
以及在执行中。我怀疑它对于执行和各种其他Prolog扩展也很有用


要全面介绍Prolog中的元编程,请参阅Sterling和Shapiro的Prolog艺术。

一个用途是非常优雅的quine:b

quine :-
    clause(quine, A),
    portray_clause((quine:-A)).
发现


当然,正如拉斯曼斯所说,这是元编程的一个例子。因此,谓词允许检查是否存在一个动态子句,它可以在给定的头和身体上成功吗?@redfalcon:不一定是动态子句,它还可以查找静态子句。谢谢,这对我来说是有意义的。