Главная

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

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

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


project:prolog:listing:golova-xvost_spiska



Программа "Голова-хвост списка"

Программа «Голова-хвост списка» - демонстрация метода разделения списка на голову и хвост.

Так как предикат print_list опеределен для объектов обоих доменов, то это правило используется для работы как со списком number_list, так и списком animal_list.

Когда правило пытается удовлетворить внешнюю цель print_list([4,-9,5,3]) то первый вариант правила, print_list[], дает неуспех, так как объект этого правила - пустой список.

Введенный список соответствует объекту второго варианта предиката, print_list([Head|Tail]).

Переменной Head, следовательно, присваивается значение первого элемента в списке, 4, в то время как переменной Tail cтавится в соответствие оставшаяся часть списка, [-9,5,3].

Теперь, когда выделен первый элемент элемент списка, с ним можно обращаться так же, как и с любым простым объектом, например вывести его на экран - write(Head),nl.

Так как хвост списка есть список сам по себе, значение переменной Tail может быть использовано в качестве объекта рекурсивного вызова print_list:

print_list(Tail)

Когда испытывается данное подправило, Tail имеет значение [-9,5,3].

Снова не проходит первый вариант print_list[], и соответствие устанавливается при помощи второго.

Переменной Head присваивается значение -9,котрое затем печатается на экране. Процесс повторяется со списком [5,3].

В конце концов, когда переменная Head принимает значение 3, переменной Tail присваивается пустой список. Теперь при рекурсивном вызове print_list(Tail) значение Tail соответствует объекту правила print_list([])

Ввиду того, что этот вариант не имеет рекурсивных вызовов, цель считается удовлетворенной, и таким образом вырабатывается условие окончания рекурсии print_list.

Первый вариант позволяет print_list завершиться успехом, когда рекурсивные вызовы опустошат весь список.

Похожий процесс имеет место и при задании внешней цели:

print_list(["Жираф", "Обезьяна", "Слон", "Крокодил"]).
Программа «Голова-хвост списка» демонстрирует использования метода разделения списка на голову и хвост.
Два списка описаны в ней:
- список целых чисел (имя домена - number_list)
- список символических имен (домен animal_list).
Правило print_list применяется для доступа к элементам обоих списков.*/
 
domains
number_list = integer *
animal_list = symbol *
 
predicates
/* Так как предикат print_list опеределен для объектов обоих доменов, то это правило используется для работы как со списком number_list, так и списком animal_list. */
print_list(number_list)
print_list(animal_list)
 
clauses
/* Правила для доступа к элементам списка */
/* Рекурсия print_list - выполнять разделение списка на голову и хвост пока не будет достигнут результат - хвост (Tail) - пустой элемент*/ 
print_list([]).
print_list([Head|Tail]) :- write(Head),nl, print_list(Tail).
 
goal
/* Внешние цели */
/* print_list([4,-9,5,3]).
/* print_list(["cat","dog","horse","cow"]). */

Результат (вводят внешние цели):

4
-9
5
3

cat
dog
horse
cow

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

Обсуждение

Ваш комментарий:
C Y T O᠎ F
 
project/prolog/listing/golova-xvost_spiska.txt · Последние изменения: 2013/03/10 20:30 (внешнее изменение)

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


www.work-zilla.com

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