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