Студопедія
рос | укр

Головна сторінка Випадкова сторінка


КАТЕГОРІЇ:

АвтомобіліБіологіяБудівництвоВідпочинок і туризмГеографіяДім і садЕкологіяЕкономікаЕлектронікаІноземні мовиІнформатикаІншеІсторіяКультураЛітератураМатематикаМедицинаМеталлургіяМеханікаОсвітаОхорона праціПедагогікаПолітикаПравоПсихологіяРелігіяСоціологіяСпортФізикаФілософіяФінансиХімія






Експериментальний.


Дата добавления: 2015-08-30; просмотров: 561



name_of_list_type = type_of_elements*

Здесь name_of_list_type является доменом списка элементов типа type_of_elements. Например, тип list, описывающий список целых чисел, можно объявить следующим образом:

Domains

list = integer*

Составной список – это список элементов, принадлежащих разным типам. Для представления составного списка в Прологе все его элементы должны быть объявлены через функторы.

Например,

llist = l(list); s(symbol); i(integer); c(char)

list = llist*

Тогда список [a, 1, [b, c]] будет представлен следующим образом: [s(a), i(1), l([s(b), s(c)])].

Выполнение работы

Рекурсивные алгоритмы как нельзя лучше подходят для обработки рекурсивных структур данных.

Прохождение бинарных деревьев

Рассмотрим алгоритм обхода бинарного дерева в симметричном порядке. Этот алгоритм рекурсивен по своей природе и сводится к следующим шагам:

1. Пройти в симметричном порядке левое поддерево.

2. Попасть в корень.

3. Пройти в симметричном порядке правое поддерево.

На языке Паскаль этот алгоритм можно записать следующим образом:

type TPNode = ^Tree;

Tree = record

Element: string;

Left, Right: TPNode;

end;

procedure PBDSP (PTree: TPNode);

Begin

if PTree <> Nilthen

begin PBDSP (PTree^.Left);

Writeln (PTree^.Element);

PBDSP (PTree^.Right)

End

end;

На языке Пролог симметричный порядок обхода дерева можно представить так:

traverse(empty).

traverse(

tree(Element, Left, Right)):-traverse(Left),

write(Element), nl,

traverse(Right).

Обработка списков

В качестве примера работы со списками рассмотрим процедуру поиска элемента в списке. Поиск представляет собой просмотр списка на предмет выявления соответствия между элементом данных (объектом поиска) и элементом просматриваемого списка. Если такое соответствие найдено, то поиск заканчивается успехом. В противном случае поиск заканчивается неуспехом. Элемент принадлежит списку, если выполняется одно из условий:

1. Элемент совпадает с головой списка.

2. Элемент принадлежит хвосту списка.

На языке Паскаль алгоритм поиска элемента в списке можно реализовать следующим образом:

typeTList = ^TElemList;

TElemList = record;

Inf: char;

Next: TList;.

end;

function Find(Elem:Сhar; List:TList):boolean;

Begin

{Проверяется случай, когда список пуст}

if (List = Nil) then Find:=false

{Рассматривается случай, когда список не пуст}

else {искомый элемент совпадает с головой списка}

if List^.Inf = Elem then Find := true

{иначе ищем элемент в хвосте списка}

else Find := Find(Elem, List^.Next);

end;

Функция Find получает два аргумента: искомый элемент и список, в котором производится поиск.

На языке Пролог алгоритм поиска элемента в списке можно реализовать следующим образом:


<== предыдущая лекция | следующая лекция ==>
Таке як 31 | Постачальники;
<== 1 ==> | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
Studopedia.info - Студопедия - 2014-2024 год . (0.194 сек.) російська версія | українська версія

Генерация страницы за: 0.195 сек.
Поможем в написании
> Курсовые, контрольные, дипломные и другие работы со скидкой до 25%
3 569 лучших специалисов, готовы оказать помощь 24/7