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
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
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