Главная

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

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

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


project:prolog:listing:poisk_ehlementa_v_spiske



Программа "Поиск элемента в списке"

Среда - только Turbo Prolog 2.0
Программа «Поиск элемента в списке».
Два списка описаны в ней:
- список целых чисел (имя домена - number_list)
- список символических имен (домен member_list). */
 
domains
/* список чисел */
number_list = number *
number = integer
/* список имен */
member_list = member *
member = symbol
 
predicates
/* Предикат find_it определен как для списков целых чисел, так и для списков символических имен, поэтому он работает со списками обоих типов. */
find_it(number, number_list)
find_it(member, member_list)
 
clauses
/* Cравнить объект поиска и голову текущего списка.
Хвост списка присваивается анонимной переменной, так как хвост в сравнении не участвует.
Условие выхода из рекурсии (цикла) */
find_it(Head, [Head|_]).
 
/* Если сравнение головы списка и объекта поиска неуспешны, то:
выделить из хвоста списка новую голову списка и сравнить её с объектом поиска.
Пролог унифицирует имеющиеся термы с заголовком правила find_it([Head,[_,Tail]).
 
Далее необходимо присвоить переменной хвост списка (не голову !),
чтобы Пролог попытался установить соответствие между объектом поиска и головой списка хвоста.
Попытка удовлетворить рекурсивное правило find_it(Head,Tail) заставляет Пролог
представить хвост текущего списка как новый самостоятельный список. */
find_it(Head, [_|Tail]) :-  find_it(Head, Tail).
 
/*Опять присвоенный переменной Tail список разделяется на голову и хвост
при посредстве утверждения find_it(Head, [Head|_]).
Процесс повторяется до тех пор, пока это утверждение дает либо успех
в случае установления соответствия на очередной рекурсии,
либо неуспех в случае исчерпания списка.*/
 
goal
/* Внешние цели -
find_it(3,[1,2,3,4,5]).
find_it("Alice",["Diana","Peter","Paul","Mary","Alice"]).*/

Если задать цель find_it(3,[1,2,3,4,5]) то первый вариант правила пытается установить соответствие между головой списка, 1, и объектом поиска, 3. Вследствие неравенства 1 и 3 результатом применения этого правила является неуспех. Процесс установления соответствия продолжается со следующей головой списка (уже усеченного), 2, и снова неуспешно. При следующей попытке голова списка, а вместе с ней и объект поиска, равны 3 - успешное завершение процесса. На экране появляется True, что как раз указывает на успешное завершение процесса установления соответствия, то есть на присутствие числа 3 в списке.

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

Обсуждение

Ваш комментарий:
B A B᠎ R Q
 
project/prolog/listing/poisk_ehlementa_v_spiske.txt · Последние изменения: 2014/05/09 19:04 (внешнее изменение)

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


www.work-zilla.com

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