Listy - fulmanski.pl

Transkrypt

Listy - fulmanski.pl
Listy
Podsumowanie
Programowanie w logice
Listy
Piotr Fulmański
Wydział Matematyki UŁ
16 marca 2007
Piotr Fulmański
Programowanie w logice
Listy
Podsumowanie
Plan prezentacji
1
Listy
Podstawowe informacje
Przykłady
Głowa i ogon
Przykłady operacji na listach
2
Podsumowanie
Do zapamiętania
Piotr Fulmański
Programowanie w logice
Listy
Podsumowanie
Podstawowe informacje
Przykłady
Głowa i ogon
Przykłady operacji na listach
• Lista to uporządkowany ciąg elementów.
• Długość listy nie jest ograniczona.
• Elementami składowymi mogą być: stałę, zmienne, struktury (listy).
• Lista pusta nie zawiera żadnych elementów (symbol: []).
• Lista jest albo listą pustą, albo jest strukturą z dwiema składowymi:
głową i ogonem.
• Głowa i ogon są argumentami funktora .
Piotr Fulmański
Programowanie w logice
Listy
Podsumowanie
Podstawowe informacje
Przykłady
Głowa i ogon
Przykłady operacji na listach
• Lista to uporządkowany ciąg elementów.
• Długość listy nie jest ograniczona.
• Elementami składowymi mogą być: stałę, zmienne, struktury (listy).
• Lista pusta nie zawiera żadnych elementów (symbol: []).
• Lista jest albo listą pustą, albo jest strukturą z dwiema składowymi:
głową i ogonem.
• Głowa i ogon są argumentami funktora .
Piotr Fulmański
Programowanie w logice
Listy
Podsumowanie
Podstawowe informacje
Przykłady
Głowa i ogon
Przykłady operacji na listach
Przykład
Lista zawierająca jeden element a
.(x,[])
.
/ \
a []
.-[]
|
a
Przykład
Lista zawierająca 3 elementy: a,b,c
.(a,.(b,.(c,[])))
.
/ \
a
.
/ \
b
.
/ \
c []
.-.-.-[]
| | |
a b c
Piotr Fulmański
Programowanie w logice
Listy
Podsumowanie
Podstawowe informacje
Przykłady
Głowa i ogon
Przykłady operacji na listach
Przykład
Lista zawierająca jeden element a
.(x,[])
.
/ \
a []
.-[]
|
a
Przykład
Lista zawierająca 3 elementy: a,b,c
.(a,.(b,.(c,[])))
.
/ \
a
.
/ \
b
.
/ \
c []
.-.-.-[]
| | |
a b c
Piotr Fulmański
Programowanie w logice
Listy
Podsumowanie
Podstawowe informacje
Przykłady
Głowa i ogon
Przykłady operacji na listach
Zapis z użyciem kropki jest, delikatnie mówiąc, mało wygodny dlatego
zwykle stosuje się inną notację.
Przykład
Lista zawierająca jeden element a
[a,[]]
lub
[a]
Przykład
Lista zawierająca 3 elementy: a,b,c
[a,b,c]
Piotr Fulmański
Programowanie w logice
Listy
Podsumowanie
Podstawowe informacje
Przykłady
Głowa i ogon
Przykłady operacji na listach
Zapis z użyciem kropki jest, delikatnie mówiąc, mało wygodny dlatego
zwykle stosuje się inną notację.
Przykład
Lista zawierająca jeden element a
[a,[]]
lub
[a]
Przykład
Lista zawierająca 3 elementy: a,b,c
[a,b,c]
Piotr Fulmański
Programowanie w logice
Listy
Podsumowanie
Podstawowe informacje
Przykłady
Głowa i ogon
Przykłady operacji na listach
Listy przetwarza się dzieląc je na dwie części: głowę, którą stanowi
pierwszy element listy, oraz ogon, który jest wszystkim co pozostało z
listy po „zabraniu” z niej głowy.
Znak | służy do rozdzielenia głowy i ogona listy.
Choć użycie znaku | dopuszczalne jest wszędzie tam, gdzie używamy
„przecinka” to nie zawsze działanie jego jest identyczne, p rzez co analiza
i interpretacja pewnych wyrażeń może byc kłopotliwa.
Piotr Fulmański
Programowanie w logice
Listy
Podsumowanie
Podstawowe informacje
Przykłady
Głowa i ogon
Przykłady operacji na listach
Listy przetwarza się dzieląc je na dwie części: głowę, którą stanowi
pierwszy element listy, oraz ogon, który jest wszystkim co pozostało z
listy po „zabraniu” z niej głowy.
Znak | służy do rozdzielenia głowy i ogona listy.
Choć użycie znaku | dopuszczalne jest wszędzie tam, gdzie używamy
„przecinka” to nie zawsze działanie jego jest identyczne, p rzez co analiza
i interpretacja pewnych wyrażeń może byc kłopotliwa.
Piotr Fulmański
Programowanie w logice
Listy
Podsumowanie
Podstawowe informacje
Przykłady
Głowa i ogon
Przykłady operacji na listach
Listy przetwarza się dzieląc je na dwie części: głowę, którą stanowi
pierwszy element listy, oraz ogon, który jest wszystkim co pozostało z
listy po „zabraniu” z niej głowy.
Znak | służy do rozdzielenia głowy i ogona listy.
Choć użycie znaku | dopuszczalne jest wszędzie tam, gdzie używamy
„przecinka” to nie zawsze działanie jego jest identyczne, p rzez co analiza
i interpretacja pewnych wyrażeń może byc kłopotliwa.
Piotr Fulmański
Programowanie w logice
Listy
Podsumowanie
Podstawowe informacje
Przykłady
Głowa i ogon
Przykłady operacji na listach
?- [A,B]=[a|b].
No
?- [A,B]=[a|b|c].
No
?- [A|B]=[a|b].
A = a
B = b
Yes
?- [A|B]=[a|b|c].
A = a
B = b|c
Yes
?- [A|B]=[a,b].
A = a
B = [b]
Yes
?- [A|B]=[a,b,c].
A = a
B = [b, c]
Yes
?- [A,B]=[a,b].
A = a
B = b
Yes
?- [A,B]=[a,b,c].
No
Piotr Fulmański
?- [A|B]=[a|[b|c]].
A = a
B = [b|c]
Yes
?- [A,B]=[a|[b|c]].
No
?- [A|B]=[a|[b|c]].
A = a
B = [b|c]
Yes
Programowanie w logice
Listy
Podsumowanie
Podstawowe informacje
Przykłady
Głowa i ogon
Przykłady operacji na listach
Przykłady głów i ogonów
Lista
[a,b,c]
[]
[[a,b],c]
[a,[b,c]]
[a,[b,c],d]
[a+b,c+d]
Głowa
a
brak
[a,b]
a
a
a+b
Ogon
[b,c]
brak
c
[b,c]
[[b,c],d]
c+d
Piotr Fulmański
Programowanie w logice
Listy
Podsumowanie
Podstawowe informacje
Przykłady
Głowa i ogon
Przykłady operacji na listach
Definicja listy
lista([]).
lista([X|Xs]) :- lista(Xs).
Piotr Fulmański
Programowanie w logice
Listy
Podsumowanie
Podstawowe informacje
Przykłady
Głowa i ogon
Przykłady operacji na listach
Predykat sprawdzający czy coś należy do listy
• X należy do listy, jeśli X jest głową listy
member(X,[X|_]).
lub to samo w inny sposób:
member(X,[Y|_]) :- X=Y.
• X należy do listy, jeśli X należy do ogona listy
member(X,[_|Y]) :- member(X,Y).
Piotr Fulmański
Programowanie w logice
Listy
Podsumowanie
Podstawowe informacje
Przykłady
Głowa i ogon
Przykłady operacji na listach
Predykat sprawdzający czy X jest prefixem listy
• lista pusta jest prefixem każdej listy
isPrefix([],Y).
• X jest prefixem listy, jeśli jest jej głową
isPrefix(X,[X|Ys]).
• X, będące być może prefixem Xs, jest prefixem Ys, jeśli Xs jest
prefixem Ys
isPrefix([X|Xs],[X|Ys]) :- isPrefix(Xs,Ys).
Piotr Fulmański
Programowanie w logice
Listy
Podsumowanie
Podstawowe informacje
Przykłady
Głowa i ogon
Przykłady operacji na listach
Predykat łączący dwie listy
• lista pusta dołączona do czegoś, daje „to coś”
lacz([],Ys,Ys).
• aby połączyć coś ([Xh|Xs]) z listą (Ys), trzeba najpierw dołączyć
ogon tego czegoś (Xs) do listy (Ys) a następnie do wyniku tego
połączenia (Zs) dopisać głowę (Xh)
lacz([Xh|Xs],Ys,[Xh|Zs]) :- lacz(Xs,Ys,Zs).
Piotr Fulmański
Programowanie w logice
Listy
Podsumowanie
Do zapamiętania
Do zapamiętania
• Czym jest lista w prologu?
• Wymień możliwe sposoby zapisu listy.
• Podaj przykład wykorzystania listy.
Piotr Fulmański
Programowanie w logice
Listy
Podsumowanie
Do zapamiętania
Do zapamiętania
• Czym jest lista w prologu?
• Wymień możliwe sposoby zapisu listy.
• Podaj przykład wykorzystania listy.
Piotr Fulmański
Programowanie w logice
Listy
Podsumowanie
Do zapamiętania
Do zapamiętania
• Czym jest lista w prologu?
• Wymień możliwe sposoby zapisu listy.
• Podaj przykład wykorzystania listy.
Piotr Fulmański
Programowanie w logice