- Философия, эзотерика:
- Религии:
- Познавательное
(обо всём)
/* GoogleAds */
Программа «Родственники» демонстрирует поиск родственников по заданным правилам.
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 сделали запрос (целевое утверждение).
!!Рекомендуем: Семейная Энциклопедия Здоровья ⇒ Что должен знать современный человек? ⇒ Самоанализ. Работа над собой ⇒ Оглавление ⇒ Главная сайта