Математическая логика и теория алгоритмов. Анкудинов Г.И - 48 стр.

UptoLike

Рубрика: 

Процедурная интерпретация клауз Хорна заключается в том, что каждое
целевое предложение рассматривается как вызов соответствующей логической
программы или подпрограммы. В отличие от обычных программ, в которых
логика управления, как правило, тесно связана выбором той или иной ветви
реализации алгоритма (программы), логические программы, как правило, не
управляют порядком выбора варианта правила или подцели при обработке
некоторого целевого утверждения. Данные программ на языке клауз Хорна
могут быть представлены либо посредством отношений, либо посредством
термов. Списочные структуры это один из примеров возможностей
представления данных на языке Prolog. Рассмотрим возможность
использования функторов для представления древовидных структур данных.
Пример 3.5. На рис. 3.2 изображено перевернутое дерево, листьями
которого являются вершины a,b и c. Программа подсчета числа листьев дерева:
domains
ttree=tree(ttree,ttree); l(symbol)
predicates
is_leaf(ttree)
leaves(ttree,integer)
clauses
is_leaf(l(a)).
is_leaf(l(b)).
is_leaf(l(c)).
leaves(X,1):-is_leaf(X).
leaves(tree(X,Y),W):-
leaves(X,U),leaves(Y,V),U+V=W.
В этой программе используется стандартный
тип данных integer. Обратите внимание, что
для встроенного предиката + (суммирование)
используется инфиксная нотация.
*
*
b c
a
Рис. 3.2.
Вводим цель
leaves(tree(l(a),tree(l(b),l(c))),X)
и получаем ответ
X=3
1 solution .
132