Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Изменение списка






Иногда необходимо из списка создать другой. Это осуществляется последовательной обработкой элементов списка, заменяя каждый вычисленной величиной.

4. Следующий пример демонстрирует просмотр списка чисел и формирование нового, не учитывая отрицательные числа:

DOMAINS

list=integer*

 

PREDICATES

discard_negatives(list, list)

 

CLAUSES

discard_negatives([], []).

discard_negatives([H|T], ProsessedTail): - H< 0,!, discard_negatives(T, ProsessedTail).

discard_negatives([H|T], [H|ProsessedTail]): - discard_negatives(T, ProsessedTail).

 

GOAL

discard_negatives([2, -45, 3, 468], X).

 

Пролог выдаст ответ (рис. 4):

X=[2, 3, 468].

 

Рис. 4. Изменнённый список

 

Членство в списке

5. Предположим, что Вы имеете список с именами Джон, Леонард, Эрик, и Фрэнк и хотели бы использовать Visual Prolog для исследования, есть ли данное имя в этом списке. Другими словами, Вы должны выразить отношение «членство» между двумя параметрами: имя и список имен. Это соответствует предикату member(name, namelist).

6. Опишите разделы доменов, предикатов, предложений и задайте цель:

DOMAINS

namelist=name*

name=symbol

 

PREDICATES

nondeterm member(name, namelist)

 

CLAUSES

member(Name, [Name|_]).

member(Name, [_|Tail]): -

member(Name, Tail).

 

GOAL

member(john, [john, leonard, eric, frank]).

 

В Программе, первое предложение исследует голову списка. Если голова списка равна имени, которое Вы ищете, то Вы можете заключить, что имя - член списка. Так как хвостовая часть списка неинтересна, она обозначена анонимной переменной. Благодаря этому первому предложению, цель member(john, [john, leonard, eric, frank]) удовлетворена.

7. Пролог ответит yes (рис. 5).

Рис. 5. Подтверждение членства в списке

 

Если голова списка не равна Name, Вы должны исследовать, может ли Name быть найдено в хвостовой части списка.

Второе предложение member касается этих отношений. На Прологе:

member(Name, [_|Tail]): - member(Name, Tail).


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.006 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал