background image

Typy danych i unifikacja -

- podsumowanie

 

2

Typy danych

 (termów):

- 

liczbowe

- rzeczywiste: real
- całkowite: integer, short, long, ulong, byte itd.

nieliczbowe

 (atomy)

- char
- symbol i string

struktury zło

ż

one

: funktor(argumenty)

- listy

Zmienne

:

- pisane z du

ż

ej litery

- zmienna anonimowa _

 

3

Unifikacja

:

stała = stała

- prawdziwe tylko wtedy, gdy obie stałe s

ą

 takie same

zmienna = stała

- je

ś

li zmienna jest nieukonkretniona to warto

ść

 stałej zostaje

  podstawiona za zmienn

ą

 (ukonkretnia j

ą

)

- je

ś

li zmienna jest ukonkretniona to patrz stała = stała

zmienna = zmienna

- je

ś

li jedna ze zmiennych jest nieukonkretniona a druga 

  ukonkretniona, to warto

ść

 tej ukonkretnionej zostaje

  podstawiona za zmienn

ą

 nieukonkretnion

ą

- je

ś

li obie zmienne s

ą

 ukonkretnione to patrz stała = stała

- je

ś

li obie zmienne s

ą

 nieukonkretnione, wtedy unifikacja

  powoduje, 

ż

e staj

ą

 si

ę

 synonimami

Listy

background image

 

5

Lista

 – jednowymiarowa „tablica“ danych o dynamicznie 

  zmieniaj

ą

cym si

ę

 rozmiarze

Deklaracja list odbywa si

ę

 za pomoc

ą

 znaku specjalnego *:

domains

Lista = Typ_danej*

gdzie 

Typ_danej

 mo

ż

e by

ć

 jakimkolwiek prostym lub zło

ż

onym

typem (równie

ż

 list

ą

), np.

domains

Lista_Integerow = Integer*
Lista_List_Integerow = Lista_Integerow*

 

6

Lista

 składa si

ę

 z 

głowy

 i 

ogona

:

Lista = [Head|Tail]

Głowa

 (head) – to wyszczególniony pocz

ą

tkowy element (lub 

     pocz

ą

tkowe elementy) listy

Ogon

 (tail) – to lista pozostałych elementów

Ogon (jako list

ę

) mo

ż

na dalej dekomponowa

ć

:

Tail = [Tail_Head|Tail_Tail]

Szczególnym przypadkiem jest 

lista pusta

 

[]

, która nie daje si

ę

dalej dekomponowa

ć

 na głow

ę

 i ogon, ale sama mo

ż

e by

ć

 ogonem:

[Element] = [Element|[]]

Rekurencyjne przetwarzanie list -

- podsumowanie

 

8

regula([]):-

przetwarzanie_1([]).

regula([H|T]):-

przetwarzanie_2(H),
regula(T).

Przetwarzanie rekurencyjne 1 

Warunek startu / stopu

Rekurencja

Przerwij, gdy osi

ą

gniesz list

ę

 pust

ą

Przykłady: 

pisz_odwrotnie, dlugosc_listy, suma_listy, maximum1

background image

 

9

regula(E,[E|_]):-

przetwarzanie_1.

regula(E,[H|T]):-

przetwarzanie_2,
regula(E,T).

Przetwarzanie rekurencyjne 2 

Warunek startu / stopu

Rekurencja

Przerwij, gdy osi

ą

gniesz okre

ś

lony element

Przykłady: 

element, pozycja1, usun_pierwszy

 

10

regula(1,E,[E|_].

regula(N,E,[H|T]):-

NN = N-1,
regula(NN,E,T).

Przetwarzanie rekurencyjne 3 

Warunek startu / stopu

Rekurencja

Przerwij, gdy osi

ą

gniesz okre

ś

lon

ą

 pozycj

ę

Przykłady: 

pozycja