/* GoogleAds */

Главная

ПРОЕКТ "ЧЕЛОВЕК. ЗЕМЛЯ. ВСЕЛЕННАЯ"

Инструменты пользователя

Инструменты сайта


project:prolog:listing:rodstvenniki



Программа «Родственники»

Программа «Родственники» демонстрирует поиск родственников по заданным правилам.

domains
  person = symbol
 
predicates
  male(person) /* мужчины */
  female(person) /* женщины */
  parents(person,person,person) /* ребёнок и его родители */
  sister(person,person) /* сестра */
 
  who_is_the_sister /* предикат нулевой арности */
 
clauses
  /* факты */
  male("Frank"). /* отец */
  male("Sam"). /* сын */
  female("Mary"). /* мать */
  female("Debbie"). /* сестра */
  parents("Sam","Frank","Mary"). /*родители Sam - Frank и Mary */
  parents("Debbie","Frank","Mary"). /*родители Sam - Frank и Mary */
 
  /* правило, задающее отношение брат-сестра */
  sister(Sister,Brother) :- female(Sister), male(Brother), parents(Sister,Father,Mother), parents(Brother,Father,Mother).
 
  /* правило нулевой арности для вывода результатов цели */
  who_is_the_sister :- sister(Sister,Brother), write(Sister," is the sister of ",Brother, "."),nl.
 
goal
  /* цель - это предикат и правило */
  who_is_the_sister

Результат выполнения программы:

Debbie is the sister of Sam.

Программа «Родственники» содержит одно правило: предикат who_is_the_sister.

who_is_the_sister является целью программы, ее единственным целевым утверждением.

Ввиду того, что цель задается в виде правила, точка входа раздела goal являет собой единственное целевое утверждение без подцелей.

Тело правила состоит из двух частей. Первая часть это правило sister. В качестве второй части-предпосылки используется предикат write, который выводит полученные правилом sister результаты.

При разработке программы такой способ записи цели более предпочтителен, так как он упрощает эту самую запись. Особенно полезным он бывает тогда, когда программа имеет много разных подцелей, включающих в себя достаточно сложные операции. С точки зрения человека, лишь использующего эту программу, такой способ также более предпочтителен, так как упрощает процедуру запросов.

Предположим, что Вы хотите узнать имя сына. Этот запрос оформляется при помощи правила:

who_is_the_son :- parents(Son,Father,Mother), male(Son), write("The son is ",Son,"."),nl.

Это правило можно поместить в раздел clauses и заменить этим правилом целевое утверждение:

goal
  who_is_the_son

Результат этого запроса: «The son is Sam».

Подобным образом можно ввести еще достаточное количество правил. Правила можно будет активизировать выборочно путем использования их в целевой конструкции. (То есть в разделе clauses задали ряд правил, а потом в разделе goal сделали запрос (целевое утверждение).

!!Рекомендуем: Семейная Энциклопедия ЗдоровьяЧто должен знать современный человек?Самоанализ. Работа над собойОглавлениеГлавная сайта

project/prolog/listing/rodstvenniki.txt · Последние изменения: 2023/09/03 22:22 (внешнее изменение)

Вы можете оставить свои комментарии в разделе "Обсуждение".
Рекомендуем оформить подписку на новости данного раздела. Для этого нажмите на кнопку "Подписаться", расположенную справа снизу каждой страницы (знак конверта).




Индекс цитирования