Domains. element = i(integer); c(char); s(string) — Студопедия
Студопедия
МОТОСАФАРИ и МОТОТУРЫ АФРИКА !!!

Авиадвигателестроения Административное право Административное право Беларусии Алгебра Архитектура Безопасность жизнедеятельности Введение в профессию «психолог» Введение в экономику культуры Высшая математика Геология Геоморфология Гидрология и гидрометрии Гидросистемы и гидромашины История Украины Культурология Культурология Логика Маркетинг Машиностроение Медицинская психология Менеджмент Металлы и сварка Методы и средства измерений электрических величин Мировая экономика Начертательная геометрия Основы экономической теории Охрана труда Пожарная тактика Процессы и структуры мышления Профессиональная психология Психология Психология менеджмента Современные фундаментальные и прикладные исследования в приборостроении Социальная психология Социально-философская проблематика Социология Статистика Теоретические основы информатики Теория автоматического регулирования Теория вероятности Транспортное право Туроператор Уголовное право Уголовный процесс Управление современным производством Физика Физические явления Философия Холодильные установки Экология Экономика История экономики Основы экономики Экономика предприятия Экономическая история Экономическая теория Экономический анализ Развитие экономики ЕС Чрезвычайные ситуации ВКонтакте Одноклассники Мой Мир Фейсбук LiveJournal Instagram

Domains. element = i(integer); c(char); s(string)




element = i(integer); c(char); s(string)

listE = element*

Такое описание списка позволит иметь дело со списками вида:

[ i(–15), s("Мама"), c('A'), s("мыла"), c('+'), s("раму"), i(48), c('!') ]

Рекурсивное определение списка: список — это структура данных, определяемая следующим образом:

- пустой список ([ ]) является списком;

- структура вида [H|T] является списком, если H — первый элемент списка (или несколько первых элементов списка, перечисленных через запятую), а T — список, состоящий из оставшихся элементов исходного списка.

Принято называть Hголовой списка, а Tхвостом списка. Фактически операция "|" позволяет разделить список на хвост и голову или, наоборот, присоединить объект (объекты) к началу списка.

Данное определение позволяет организовывать рекурсивную обработку списков, разделяя непустой список на голову и хвост. Хвост, в свою очередь, также является списком, содержащим меньшее количество элементов, чем исходный список. Например, в списке [1, 2, 3] элемент 1 является головой, а список [2, 3] — хвостом, т.е. [1, 2, 3] = [ 1 | [2, 3] ].

В этом же списке можно выделить два первых элемента и хвост из третьего элемента [1 ,2 | [3] ]. И, наконец, возможен вариант разбиения на голову из трех первых элементов и пустой хвост: [1, 2, 3 | [] ].

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

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

Для решения этой задачи воспользуемся фактом, что в пустом списке элементов нет, а количество элементов непустого списка, представленного в виде объединения первого элемента и хвоста, равно количеству элементов хвоста, увеличенному на единицу.

length([ ], 0). /* в пустом списке элементов нет */

length([_|T], L) :– length(T, L_T), L = L_T + 1.

/* L_T — кол-во элементов в хвосте */

/* L — кол-во элементов исх. списка */

Соответствующий запрос может быть таким:

Goal: length([1,2,3] , X).

Ввод и вывод списка

Ввод списка осуществляется с помощью предиката readterm(<тип списка>, Х ). Для выводасписка используется оператор write(Х), при этом список Х рассматривается как один терм.

Пример 1. Организовать ввод списка из целых чисел.

Domains

list=integer*

Goal

write("Введите список "), readterm(list,X), nl,

write("список L = "), write(X), nl.

Пример 2. Организовать поэлементный ввод списка.




Domains

list=integer*

Predicates

Readlist(list)

Goal

write("Введите список "), readlist(L),nl,

write("список L = ",L).





Дата добавления: 2015-02-24; просмотров: 264; Опубликованный материал нарушает авторские права? | Защита персональных данных


Не нашли то, что искали? Воспользуйтесь поиском:

Лучшие изречения: На стипендию можно купить что-нибудь, но не больше... 9489 - | 7522 - или читать все...

Читайте также:

 

18.207.130.162 © studopedia.ru Не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования. Есть нарушение авторского права? Напишите нам | Обратная связь.


Генерация страницы за: 0.003 сек.