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