2011-05-10 91 views
3

我正在嘗試學習一些Prolog(使用ECLiPSe)。我偶爾會碰到第二個謂詞,但我不明白它的用途。我閱讀了一些參考文獻(例如this one),但我仍然沒有弄清楚它可能有用。有人能給我提供一個簡單的例子或解釋嗎?瞭解子句/ 2謂詞

回答

3

此謂詞允許元編程,即推理您的Prolog程序。

SWI-Prolog使用中,A.O. clause/2explain謂:

?- 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. 

並在Constraint Handling Rules實施。我懷疑這對於做inductive logic programming和其他各種Prolog擴展也很有用。

有關Prolog中元編程的全面介紹,請參閱Sterling和Shapiro的Prolog

+0

所以,謂語允許檢查是否的情況下,有一個動態的條款,可以在給定的頭部和身體上成功嗎? – Lennart 2011-05-11 09:55:56

+1

@redfalcon:不一定是動態子句,它也可以找到靜態子句。 – 2011-05-11 16:29:22

+0

謝謝,這對我很有意義。 – Lennart 2011-05-12 09:10:02

1

一個使用是一個非常優雅的奎因:乙

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

發現here

這當然是元編程作爲larsmans說