Wyklad07 handout


Dzisiejszy wykład
Narzędzia informatyczne w językoznawstwie
Perl - Manipulowanie tablic, zmienne lokalne, funkcje
î%
Wrócimy do tablic i omówimy:
î%
wydajne dodawanie i usuwanie elementów z tablic
Marcin Junczys-Dowmunt
î%
Omówimy zmienne lokalne oraz zakresy ważności zmiennych
junczys@amu.edu.pl
î%
Wprowadzimy pojęcie funkcji i omówimy:
î%
wykonywanie funkcji
Zakład Logiki Stosowanej
î%
zwracanie argumentów przez funkcje
http://www.logic.amu.edu.pl
î%
przekazywanie argumentów do funkcji
24. grudnia 2008
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 1/1 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 2/1
Usuwanie elementów z początku tablicy Dodawanie elementów do początku tablic
1 @kolejka = qw( Marysia Janek Hania Kuba)
while ( @kolejka) {
print " Osoby w kolejce: ". join( @kolejka)."\n";
1 @kolejka = qw( Marysia Janek Hania Kuba)
$aktualna = shift ( @kolejka);
while ( @kolejka) { 5 print " Kasjerka obsługuje: $aktualna\n";
print " Osoby w kolejce: ". join( @kolejka)."\n";
print " Kasjerka obsługuje: ". shift ( @kolejka)."\n";
if( rand () < 0.5) {
5 } print " Zly bilet , $aktualna wraca do okna\n";
unshift( @kolejka , $aktualna);
î% 10 }
Funkcja shift usuwa pierwszy element tablicy i zwraca go
}
î%
Indeksy  przesuwajÄ… siÄ™, stÄ…d nazwa shift
î%
Funkcja unshift wstawia element na poczÄ…tek tablicy
î%
Wstawia kilka elementów, gdy drugim elementem jest lista
î%
 Przesunięcie indeksów następuje w drugą stronę
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 3/1 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 4/1
Dodawanie elementów do końca tablicy Usuwanie elementów z końca tablica
1 @kolejka = qw( Marysia Janek Hania Kuba)
1 @kolejka = qw( Marysia Janek Hania Kuba)
while ( @kolejka) {
while ( @kolejka) {
print " Osoby w kolejce: ". join( @kolejka)."\n";
print " Osoby w kolejce: ". join( @kolejka)."\n";
$aktualna = shift ( @kolejka);
$aktualna = shift ( @kolejka);
5 print " Kasjerka obsługuje: $aktualna\n";
5 print " Kasjerka obsługuje: $aktualna\n";
if( rand () < 0.5) {
if( rand () < 0.5) {
print " Zly bilet , $aktualna wraca na koniec \n";
print " Zly bilet , $aktualna wraca na koniec \n";
push ( @kolejka , $aktualna);
push ( @kolejka , $aktualna);
10 }
10 }
if( rand () < 0.5) {
}
print pop( @kolejka)." ma dosyć czekania\n";
}
î%
Funkcja push wstawia element na koniec tablicy
}
î%
Wstawia kilka elementów, gdy drugim elementem jest lista
î%
Dodawanie elementów na koÅ„cu nie  przesuwa indeksów î%
Funkcję pop poznaliśmy już wcześniej
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 5/1 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 6/1
Wstawianie i usuwanie dowolnych elementów tablicy I Wstawianie i usuwanie dowolnych elementów tablicy II
î%
splice może zastąpić każdą z poprzednich funkcji
1 splice TABLICA , PRZESUNICIE , DAUGOŚĆ , LISTA
1 push(@a ,$x ,$y ) splice (@a ,@a ,0 ,$x , $y)
splice TABLICA , PRZESUNICIE , DAUGOŚĆ
pop( @a) splice (@a , -1)
splice TABLICA , PRZESUNICIE
shift ( @a) splice (@a ,0 ,1)
splice TABLICA
unshift(@a ,$x ,$y) splice (@a ,0 ,0 ,$x ,$y)
5 $a[ $i] = $y splice (@a ,$i ,1 , $y)
î%
Funkcja splice jest bardziej uniwersalna od poprzednich
î%
î% i nie tylko
Potrafi usuwać i dodawać elementy w dowolnym miejscu
î%
Zwraca wszystkie usunięte elementy w kontekście listowym
1 splice (@a ,3 ,3) # usuń 3 elementy od 3
î%
Zwraca ostatni usunięty element w kontekście skalarnym
splice (@a ,3 ,3 ,$x , $y) # zastÄ…p 3 elementy od 3
# elementami $x i $y
î%
Liczba indeksów jest odpowiednio zmniejszana lub zwiększana
splice (@a ,3) # usuń wszystkie elementy od 3
5 splice ( @a) # usuń wszystkie elementy
splice (@a ,3 ,0 , $x) # wstaw $x na 3, przesuń resztę
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 7/1 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 8/1
Kontekst listowy a zmienne skalarne Zmienne lokalne i zmienne globalne I
Jakie będą odpowiednio wartości zmiennych $test, $test2 oraz
î%
Jak dotąd korzystaliśmy tylko ze zmiennych globalnych
@tablica2 w poniższych przykładach i dlaczego?
î%
Ogólnie uznaję sie to za zły styl programowania  Dlaczego?
1 @tablica = qw( aa ab ba bb );
Czym rózni się zmienna lokalna od globalnej?
$test = @tablica;
print " Test 1: $test \n"; î%
Zmienna globalna jest dostępna w każdym miejscu naszego
5
programu
( $test ) = @tablica;
î%
Zmienna lokalna jest dostępna tylko wewnątrz bloku, w
print " Test 2: $test \n";
którym została stworzona
( $test , $test2 ) = @tablica; î%
Zmienna globalna przestaje istnieć, gdy zakończy się program
10 print " Test 3: $test , $test2 \n";
î%
Zmienne lokalna przestaje istnieć, gdy opuszczamy blok, w
którym zostałą stworzona
( @tablica2 , $test ) = @tablica;
î%
print " Test 4: $test \n"; Uwaga: Zmienna $ jest zmiennÄ… globalnÄ… !
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 9/1 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 10/1
Zmienne lokalne i zmienne globalne II Zmienne lokalne i zmienne globalne III
1 my $x = 4;
1 $globalna = 4;
print " Blok 1: x = $x\n";
print " Globalna: $globalna\n";
{
my $x = 5;
{
5 my $y = 3;
5 my $lokalna = 5;
print " Blok 2: x = $x , y = $y\n";
print " Lokalna: $lokalna\n";
{
}
my $x ;
print " Blok 3: x = $x , y = $y\n";
print " Globalna: $globalna\n";
10 }
10 print " Lokalna: $lokalna\n";
}
print " Blok 1: x = $x , y = $y\n";
î%
Zmienna lokalna jest tworzona wewnÄ…trz bloku za pomocÄ…
î%
słowa kluczowego my Zmienna lokalna stworzona poza jakimkolwiek blokiem jest
zmiennÄ… globalnÄ…
î%
Bez słowa kluczowego my stworzylibyśmy kolejną zmienną
î%
globalnÄ…
my tworzy zupełnie nową zmienną, która przykrywa inne
zmienne (z otaczających bloków) o tej samej nazwie
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 11/1 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 12/1
Funkcje w Perlu Funkcje - przykład programu bez funkcji
1 print " Podaj imie: ";
while ( my $name = ) {
î%
Nasze programy zaczynają się rozrastać
chomp ( $name );
exit if( $name eq   );
î%
Byłoby lepiej, gdybyśmy znali sposób na uporządkowanie
5 print " Witaj , $name !\n";
naszego kodu
print " Podaj imie: ";
î%
Takim sposobem sÄ… funkcje
}
î%
Funkcje to małe podprogramy, z których możemy korzystać
î%
Podobny program widzieliśmy na ostatnim wykładzie
wiele razy w naszym programie
î%
Co siÄ™ stanie, gdy podamy  pustÄ™ imiÄ™?
î%
Dlaczego pojawia siÄ™ dwa razy ciÄ…g  Podaj imiÄ™ ?
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 13/1 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 14/1
Funkcje - pierwszy przykład z funkcjami Struktura funkcji
î%
Funkcje to bloki programu, które są zapisywane poza
właściwym programem (za lub przed)
1 while ( my $name = pobierz_imie ()) {
print " Witaj , $name !\n";
î%
Wykonują się one dopiero, gdy jawnie użyjemy nazwy funkcji
}
we właściwym programie
î%
Słowo kluczowe sub poprzedza nazwę funkcji, którą ustalamy
5 sub pobierz_imie {
sami; nazwy powinny kojarzyć się działaniem tworzonej funkcji
print " Podaj imie: ";
my $name = ;
î%
Polecenie return wewnętrz funkcji, natychmiast kończy
chomp ( $name );
działanie funkcji
return $name ;
î%
Jeśli przy return zostało podane jakieś wyrażenie, to zostanie
10 }
one przez funkcję zwrócone
î%
Możemy zwracać wartości skalarne i tablicowe
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 15/1 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 16/1
Przykład - przekazywanie argumentów do funkcji Przekazywanie argumentów do funkcji
1 while ( my $name = pobierz_imie ()) {
î%
Możemy również przekazywać zmienne i wartości do funkcji
witaj ( $name );
î%
Odbywa siÄ™ to za pomocÄ… specjalnej tablicy @
}
î%
Tablica @ jest tablicową wersją zmiennej domyślnej $
5 sub pobierz_imie {
î%
Wszystkie argumenty funkcji sÄ… zapisywane do tablicy @ w
print " Podaj imie: ";
takiej kolejności w jakiej zostały podane przy wywołaniu
my $name = ;
funkcji
chomp ( $name );
î%
return $name ; Wewnątrz funkcji powinniśmy (ale nie musimy) skopiować
10 }
wartości z tablicy @ do odpowiednio nazwanych zmiennych
lokalnych
sub witaj {
î%
Do kopiowania mogą nam służyć dowolne metody poznane
my $name = shift ;
dzisiaj w pierwszej części wykładu. Poprzedni i następny
print " Witaj , $name !";
15 } sposób uznaje się za kanoniczne.
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 17/1 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 18/1
Przykład - wersja wieloargumentowa (kanoniczny) Przykład - wersja wieloargumentowa (niekanoniczny)
1 while ( my ( $f_name , $s_name) = pobierz_nazwisko ()) { 1 while ( my @names = pobierz_nazwisko ()) {
witaj ( $f_name , $s_name); witaj ( @names );
} }
5 sub pobierz_nazwisko { 5 sub pobierz_nazwisko {
print " Podaj imie: "; my @names ;
my $f_name = ; print " Podaj imie: ";
print " Podaj nazwisko: "; $names [0] = ;
my $s_name = ; print " Podaj nazwisko: ";
10 10 $names [1] = ;
chomp ( $f_name , $s_name);
return ( $f_name , $s_name); chomp ( @names );
} return @names ;
}
15 sub witaj { 15
my ( $f_name , $s_name) = @_; sub witaj {
print " Witaj , $f_name $s_name!"; print " Witaj , $_ [0] $_ [1]!";
} }
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 19/1 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 20/1
Program zliczajÄ…cy znaki w pliku - bez funkcji Program zliczajÄ…cy znaki w pliku - z funkcjami
1 my $total_count;
foreach my $filename ( @ARGV ) {
my $count = zlicz ( $filename);
1 my $total_count;
print " Plik $filename zawiera $count znakow \n";
foreach my $filename ( @ARGV ) {
5 $total_count += $count ;
open(IN , " < $filename") or die " Plik nie istnieje";
}
my $count ;
print "W sumie było $total_count znakow \n";
5 while () {
$count += length ( $_ );
sub zlicz {
}
10 my $filename = shift ;
close ( IN );
open(IN , " < $filename") or die " Plik nie istnieje";
print " Plik $filename zawiera $count znakow \n";
my $count ;
10 $total_count += $count ;
while () {
}
$count += length ( $_ );
print "W sumie było $total_count znakow \n";
15 }
close ( IN );
return $count ;
}
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 21/1 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 22/1


Wyszukiwarka

Podobne podstrony:
Wyklad4 handout
Wyklad3 handout
Wyklad17 handout
Wyklad06 handout
Wyklad5 handout
Wyklad2 handout
Wyklad04 2008 handout
Wyklad xmlparse handout
Wyklad1 2008 handout
20151012 MichalTrzesiok Statystyka wyklad2 miary statystyczne handout
Wyklad03 2008 handout
Wyklad2 2008 handout
Wyklad05 2008 handout
20151019 MichalTrzesiok Statystyka wyklad3 analiza korelacji handout
Sieci komputerowe wyklady dr Furtak
Wykład 05 Opadanie i fluidyzacja
AGH Sed 4 sed transport & deposition EN ver2 HANDOUT

więcej podobnych podstron