Понимание предиката clause / 2 - PullRequest
3 голосов
/ 10 мая 2011

Я сейчас пытаюсь выучить немного Пролога (используя ECLiPSe).Время от времени я сталкиваюсь с предикатом пункта / 2, но не понимаю, для чего он используется.Я прочитал некоторые ссылки (например, этот ), но я до сих пор не понимаю, в каком случае это может быть полезно.Может ли кто-нибудь дать мне простой пример или объяснение этого?

Ответы [ 2 ]

3 голосов
/ 10 мая 2011

Этот предикат позволяет метапрограммировать, то есть рассуждать о вашей программе Prolog.

SWI-Prolog использует clause/2 in, a.o., предикат explain:

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

Подробное введение в метапрограммирование в Прологе см. Искусство Пролога от Стерлинга и Шапиро.

1 голос
/ 10 мая 2011

одно использование - действительно изящная квинна: ​​b

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

найдено здесь

Это, конечно, случай метапрограммирования, как сказал Ларсман

...