prolog

background image

Prolog – przetwarzanie list

Maciej Krzywonos
Łukasz Dajcz

background image

Prolog – reprezentacja list

Lista jest dowolnym ciągiem obiektów

zapisywanych w postaci:

[element_1,element_2,...,element_n]

background image

Prolog - reprezentacja list

Lista jest reprezentowana w postaci

struktury drzewa:

background image

Prolog - reprezentacja list

Budowa listy:

• głowa – wskazuje początek listy

• ogon – wskazuje na pozostałe elementy

listy

background image

Prolog – właściwości list

Właściwości list:
• Głowa listy może być dowolną strukturą

języka prolog

• Ogon listy jest zawsze listą
• Lista jest strukturą rekurencyjną - jeśli

ogon listy nie jest pusty to też jest listą

background image

Prolog – właściwości list

W języku Prolog listy mogą być zapisywany w sposób

bezpośrednio odzwierciedlającym ich budowę:

[Head | Tail]

, gdzie:

Head – ciąg dowolnych elemntów
Tail – lista elemntów, np.:

[Man, Audi, BMW]=[Man|[Audi, BMW]]=[Man, Audi|[BMW]]

Elementem składowym listy może być inna lista

background image

Prolog-przykłady list

Przykładowe listy:

Samochody = [Audi, Mercedes]
Autobusy = [Volvo, Solaris]
Pojazdy = [pociagi, Samochody, Autobusy]
Lista = [pociagi, autobusy, [samoloty, statki]]

background image

przetwarzanie list - dodawanie
elementu

Operacja dodawania elementu do listy.

Element dodawany jest na początek listy (element jest

głową listy), np.:

add(element_1,Lista, [element_1|Lista])

background image

przetwarzanie list - member

Operacje sprawdzająca czy dany element należy do listy:

member(A,Lista)

powinno być prawdziwe jeśli a jest

elementem listy Lista

member (b,[a,b,c]). - prawda
member(b,[a,[b,c]]). - falsz
member([b,c],[a,[b,c]]). -prawda
member([a|_],[b,d,[a,f,g,a,h,i]]). - prawda

implementacja:

member(X,[X|Ogon]).
member(X,[Glowa|Ogon]):-member(X,Ogon).

background image

Łączenie list

Operacja łączenia list:

conc(Lista_1,Lista_2,Lista_3).

– łączy listę lista_1 z

lista_2, połączone listy znajdują się w liście trzeciej
(lista_3), np.:

conc ([a,c],[b,g],W)
W=[a,c,b,g]
conc([Man, Star],[Audi, BMW],W)
W=[Man,Star,Audi,BMW]

background image

`

Zapis łączenia list w języku Prolog:

conc([],Lista,Lista).
conc([H|T1],L2,[H|T2]):- conc(T1,L2,T2).

background image

Łączenie list

Zastosowanie operacji łączenia list:
Dekompozycja list, np.:

conc(Lista_1, Lista_2,[s,i,k]).
Lista_1=[]
Lista_2=[s,i,k];

Lista_1=[s]
Lista_2=[i,k];

background image

Łączenie list

Lista_1=[s,i]
Lista_2=[k];

Lista_1=[s,i,k]
Lista_2=[];

background image

Łączenie list

Operacja szukania podlist, np.:

?- conc(Przed,[sr|Po],[pon,wt,sr,czw,pt,sob,nd]).

Przed = [pon,wt]
Po = [czw,pt,sob,nd]

Szukanie poprzednika i następnika:

?- conc(_, [Przed,sr,Po|_],[pon,wt,sr,czw,pt,sob,nd]).

Przed=wt
Po=czw

background image

Łączenie list

Usuwanie podlisty za pomocą operacji conc,np.:

?- Lista_1 = [a,b,z,z,c,z,z,z,d,e],conc(Lista_2,

[z,z,z|_],Lista_1)

Lista_1 = [a,b,z,z,c,z,z,z,d,e]
Lista_2 = [a,b,z,z,c]

background image

Szukanie podlisty

Operacja sublist(S,L) – lista S należy do listy L, jeśli lista L

składa się z dwóch list L1 i L2, a lista L2 jest połączeniem

list S i L3.

sublist(S,L):- conc(L1,L2,L), conc(S,L3,L2).
np.:

?- sublist(S,[c,d,a]).
S=[];
S=[c];
S=[c,d];
S=[c,d,a];
S=[d];

background image

Permutacje elementów listy

Operacja generowania permutacji listy jest realizowana za

pomocą polecenia permut (lista_1, lista_2). Jest ona
prawdziwa jeśli lista lista_2 jest permutacją listy
lista_1,np.:

?- permut([1,2,3],Lista).
Lista=[1,2,3];
Lista=[1,3,2];
Lista=[2,1,3];
.
.
.

background image

Permutacja elementów listy

Najpierw usuwamy element, na pozostałej reszcie
dokonujemy permutacji i wstawiamy element na początek

implementacja:

permutacja([],[]).
permutacja(L,[X|P]) :- del(X,L,L1) , permutacja(L1,P).

background image

Operacje delete

Operacja usuwania elementu z listy.

del(element_1, Lista_1, Lista_2)

jest prawdziwe jeśli

lista lista_2 jest równa liście lista_1 pomniejszona o
element element_1. Położenie elementu element_1 jest
dowolne.

Zapis w Prologu:

del(X,[X|Ogon], Ogon).
del(X,[H|Ogon],[H|Ogon1]):-del(X,Ogon,Ogon1).

background image

Prolog – przetwarzanie list

Operacja del c.d.
Wstawianie elementu do listy za pomocą operacji del, np.:

?-del(a,Lista,[1,2,3]).

Lista=[a,1,2,3];
Lista=[1,a,2,3];
Lista=[1,2,a,3];

Lista=[1,2,3,a];

background image

Prolog – przetwarzanie list

Operacja del c.d.
Operacja del(element, lista_1,lista_2) usuwa tylko jedno

wystąpienie element z listy lista_1, np.:

?- del(w,[w,q,w,w],Lista).
Lista=[q,w,w];
Lista=[w,q,w];
Lista=[w,q,w];

background image

Odwracanie listy

Możemy odwrócić kolejność elementów listy

odwroc([a,b,c],W).
W = [c, b, a].

lub:

odwroc(W,[a,b,c]).
W = [c, b, a]
implementacja:

odwroc([],[]).
odwroc([H|T],L) :- odwroc(T,R ), conc(R,[H],L).

background image

Obliczanie długości listy

Możemy obliczyć długość listy:

?- dlugosc([a,b,c],Wynik).
Wynik = 3.

implementacja:

dlugosc([],0).
dlugosc([_|Ogon],Dlug) :- dlugosc(Ogon,X) , Dlug is

X+1.

background image

Prolog - listy

Koniec


Document Outline


Wyszukiwarka

Podobne podstrony:
prolog
Prolog Programowanie W F Clocksin C S Mellish
Przedmowa Prolog
Prolog Listy
Prolog
Prolog (3)
prolog
prolog, PROGRAMOWANIE DEKLARATYWNE, PROGRAMOWANIE DEKLARATYWNE, ZADANIA
1-2 lab, Laboratorium 1, Laboratorium 1 - Prolog
prologo
Broken Heart Od Prologu do Rozdziału 24
prolog zadania rozne
Prolog, Tłumaczenia, Trwające, Kailin Gow
prolog PZR6SZ3J3UV6LTM2KP7UMCZIPZGUR77BGTIBNTA
Czarna biblia 2.PROLOG
Prolog w 33 minuty
Prolog
Prolog
PD W2 Wstep do j Prolog(2010 11 05) 1 1

więcej podobnych podstron