Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PRYeDSTAVLYeNIYe_ZNANIJ_V_INFORMATsIONN_H_SISTY....docx
Скачиваний:
16
Добавлен:
22.12.2018
Размер:
267.15 Кб
Скачать

Списки в прологе

Список – это упорядоченная последовательность элементов.

Объектами списка могут быть любые элементы. Список может является частью другого списка. Список записывается в квадратных скобках.

<пропустил, помогал списывать контрольную>

Domains

list=real*.

Predicates

member(real,list)

clauses

member(X,[X|_]).

member(X,[_|T]):-member(X,T)

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

Операция отсечения

Пролог имеет встроенную операцию отсечения, которая записывается восклицательным знаком.

Разделение списка

domains

list=integer*.

Predicates

del(integer, list, list, list).

clauses

del(H,[H|T], [H|L1], L2):-H<M,

del(M,T,L1,L2).

del(M,[H|T],L1,[H|L2]):-H>=M,

del(M,T,L1,L2).

del(_,[],[],[]).

Всегда происходит деление списка по условиям. Делим список на голову и хвост. Голову сравниваем с условием и относим либо к L1 либо к L2. (т.е. был изначально список L, после разбиение стал L1 и L2). А оставшийся хвост делим на голову и хвост.

Пока не достигнем граничного условия (последнее условие), когда список не будет состоят из пустых элементов.

del (8, [1,2,13,4,5,12,18,2,12],L1,L2)

L1=[1,2,4,5,2]

L2=[13,12,18,12]

Объединение списка

domains

list=integer*.

Predicates

append(list, list, list).

clauses

append([],L,L).

append([N|L1], L2, [N|L3]):- append(L1,L2,L3).

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

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

Сортировка списков

domains

list=integer*.

predicates

sort(list,list).

cord(number, number).

rel(number, list, list).

clauses

sort([],[]).

sort([X|T], S1):- sort(T, S2), rel(X,S2,S1).

rel(X,[Y|S1],[Y,S2]) cord(X,Y), !, rel(X,S1,S2)

rel(X,S1,[X,|S1])

cord(X,S1,[X|S1]).

cord проверяет условия упорядоченности

sort сортирует

Сортировка осуществляется методом вставки.

sort([X|T], S1):- sort(T, S2), rel(X,S2,S1). – если S1 не пустой список то его можно представит в виде головы и хвоста списка.

rel(X,[Y|S1],[Y,S2]) cord(X,Y), !, rel(X,S1,S2) - предполагая, что элемент X вставляется в начало элемента списка S1 проверяется, удовлетворяет ли элемент Х и голова списка условию упорядоченности. Если условие нарушено (выполняется предикат cord), то элемент X вставляется в хвост списка с помощью рекурсивного обращения к предикату rel.

rel(X,S1,[X,|S1]) – если условие упорядоченности выполнено, то происходит переход ко второму предложению процедуры rel, которая осуществляет формирование выходного списка S2 путем вставки элемента X в начало списка S1.

Сетевые модели Семантические сети

Семантической сетью называется ориентированный граф, с помеченными вершинами и дугами, где вершины соответствуют конкретным объектам, а дугам – отношение между ними.

Граф – это совокупность объектов со связями между ними.

Семантическая сеть может быть представлена в виде , где А – это множество вершин NA – множество имен вершин, В – множество дуг, NB – множество имен дуг.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]