Dzisiejszy wykład
Narzędzia informatyczne w językoznawstwie
Perl - Struktury kontrolne i zmienne
Dziś wprowadzimy różne typy danych oraz różne rodzaje
zmiennych zawierające takie dane
Marcin Junczys-Dowmunt
Omówimy podstawowe struktury kontrolne
junczys@amu.edu.pl
Na końcu przejdziemy do małych programików nadających się
Zakład Logiki Stosowanej
np. do eksperymentów psycholingwistycznych
http://www.logic.amu.edu.pl
05. listopada 2007
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 1/24 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 2/24
Liczby i łańcuchy znaków Liczby i łańcuchy znakowe
Na razie będziemy korzystać z dwóch podstawowych typów
1 print(3);
danych: liczb i łańcuchów znakowych.
print(" ");
Liczby
print(3 + 4);
print(" ");
Dopuszczalne są wartości całkowite, zmiennoprzecinkowe,
5 print("3 + 4");
ujemne, wykładnicze itp.
print("\n");
Perl nie rozróżnia tych rodzajów liczb, jak to się dzieje np. w C print(5 * 2);
print(" ");
print(9/3);
Aańcuchy znakowe
10 print(" ");
print(2 ** 8);
Wszystko co jest ujęte w podwójny lub pojedynczy cudzysłów
print("\n");
nazywamy łańcuchem znakowym
Proszę opisać, co się dzieje w każdym wierszu.
W Perlu nie wszystkie łańcuchy znakowe możemy nazwać
Jaki działa cudzysłów podwójny a jak cudzysłów pojedynczy?
stałymi (te w pojedynczym cudzysłowie na pewno)
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 3/24 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 4/24
Operatory Zmienne skalarne
Zmienne zawierające liczby, znaki łańcuchowe i referencje1
nazywamy zmiennymi skalarnymi.
Istnieją też operatory dla łańcuchów znakowych oraz operatory
Struktura nazwy zmiennej skalarnej w Perlu:
mieszane np.
Pierwszy znak to przedrostek $ (podobny do s jak scalar)
1 print("-" x 50);
print("\n");
Drugi znak to dowolna litera lub znak podkreślenia
print("konkatenacja" . " " . "łańcuchów\n");
Kolejne znaki to dowolne litery lub liczby lub znak
print("-" x 50);
podkreślenia
5 print("\n");
Przykłady:
$ , $a, $abc, $a12, $to jest zmienna, $a to zmienna o numerze 2
1
o referencjach więcej innym razem
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 5/24 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 6/24
Zmienne skalarne Interpolacja zmiennych
Zamiast łączyć kilka zmiennych w większy łańcuch znakowy za
Na zmiennych możemy wykonywać takie same operacje jak na
pomocą operatora konkatenacji, możemy wykorzystać możliwości
stałych plus operację przypisania (=):
Perla w zakresie interpolacji zmiennych.
1 $one = 2;
$two = 3;
Interpolacja to operacja, która zamienia nazwę zmiennej w
$three = $one + $two;
łańcuchu znakowym na jej wartość.2
print($three . "\n");
1 $hat = "chair";
$chair = "hat";
1 $hat = "chair";
print("$chair $hat\n");
$chair = "hat";
print($chair . " " . $hat . "\n");
Pytanie: Co stanie się, gdy zastąpimy podwójny cudzysłów
Jak widać, nazwa i treść zmiennej nie muszą być ze sobą pojedynczym cudzysłowem?
powiązane.
2
To przez interpolacje zmiennych nie możemy mówić, że wszystkie łańcuchy
znakowe to stałe.
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 7/24 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 8/24
Zmienne tablicowe Ustawianie zmiennych tablicowych
Zmienne tablicowe to zmienne złożone
1 @rok = ("styczen", "luty", "marzec");
Dokładniej: to listy zmiennych skalarnych
print "Trzeci miesiac roku: ".$rok[2]."\n";
Każda z tych zmiennych skalarnych w tablicy ma
print "Pierwszy miesiac roku: $rok[0]\n";
jednoznacznie przyporządkowany indeks (numer)
Tablica zawierająca n elementów jest indeksowana liczbami od
Kanoniczny sposób zapisywania wartości do tablicy
0 do n - 1
Elementy zostaną ponumerowane od 0 do 2
Przedrostek tablicy w Perlu to @ (podobne do a jak array),
Odwołując się do wartości elementów tablicy korzystamy z $,
np.@tablica
ponieważ wartości tablicy to skalary!
Nie ma górnego ograniczenia liczby elementów tablicy (tylko
Wartości tablicy też podlegają interpolacji zmiennych
pamięć danego komputera)
Tablice są strukturami dynamicznymi (długość nie jest stała)
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 9/24 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 10/24
Ustawianie zmiennych tablicowych Ustawianie zmiennych tablicowych
7 @kwartal3 = qw( lipiec sierpien wrzesien );
4 $rok[3] = "kwiecien";
@rok[6 .. 8] = @kwartal3;
5 $rok[4] = "maj";
print join(" - ",@rok[6 .. 8])."\n";
$rok[5] = "czerwiec";
Skrótowy sposób inicjalizacji tablicy (dla listy łańcuchów
Możemy zapisywać wartości bezpośrednio do elementów
znakowych)
skalarnych tablicy
Białe znaki funkcjonują jak separatory
Elementy tablicy nie różnią się niczym od normalnych
zmiennych
Możemy też zapisywać do podprzedziału tablicy
Jeśli taki indeks wcześniej nie istniał, zostanie stworzony
Wycinek tablicy jest tablicą, stąd przedrostek@
Ewentualne wartości pośrednie zostaną wypełnione wartością
Funkcjajoinłączy daną tablicę w łańcuch znakowy z
undef(niezdefiniowana)
podanym separatorem wstawionym między elementami
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 11/24 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 12/24
Ustawianie zmiennych tablicowych Struktury kontrolne - warunki
1 if (wyrażenie) { blok } else { blok }
10 @rok[9,10,11] = qw( pazdziernik listopad grudzien );
print "Następujące miesiące mają 31 dni: \n";
unless (wyrażnie) { blok } else { blok }
print join("\n",@rok[0,2,4,6,7,9,11])."\n";
5 if (wyrażenie1) { blok }
print "Następujące miesiące mają 30 dni: \n";
elsif (wyrażenie2) { blok }
15 @m30 = (3,5,8,10);
...
print join("\n",@rok[@m30])."\n";
elsif (ostatniewyrażenie) { blok }
else { blok }
print "A $rok[1] ma 28 dni\n";
W Perlu nie ma typów logicznych jako takich, fałszywe są:
Wycinki tablic to nie tylko przedziały liczb. Możemy korzystać
liczba zero, łańcuch zerowy, wartośćundef, puste tablice
z list dowolnych liczb
(zywkłe i asocjacyjne). Pozostałe są prawdziwe
Lub nawet z innych tablic
W blokach możemy umieścić dowolną liczbę instrukcji
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 13/24 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 14/24
Operatory porównania Przykładif
Numeryczne Aańcuchowe Znaczenie
1 @tab1 = qw(Antek Bartek);
== eq jest równe
@tab2 = ("Edek", "Dudek");
!= ne nie jest równe
<=> cmp porównanie ze znakiem if(@tab1 == @tab2) {
5 if($tab1[0] lt $tab2[0]) {
print "$tab1[0] poprzedza $tab2[0]\n";
Numeryczne Aańcuchowe Znaczenie
}
> gt większe niż
elsif($tab1[0] gt $tab[0]) {
>= ge większe-równe niż
print "$tab2[0] poprzedza $tab1[0]\n";
< lt mniejsze niż
10 }
<= le mniejsze-równe niż else {
print "$tab1[0] jest równe $tab2[0]\n";
}
Porównując liczby korzystamy z operatorów numerycznych.
}
Porównując łańcuchy korzystamy z operatorów łańcuchowych.
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 15/24 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 16/24
Pętle Pętlawhile- przykład
W Perlu mamy trzy główne rodzaje pętli:
1 @pokoj = qw(krzeslo stol lozko szafa);
pętlę typuwhileznamy z innych programów (np. Pascal)
print "Pokoj zawiera nast. meble: ".join(", ", @pokoj);
1 while(wyrażenie) {
block
5 while(@pokoj > 2) {
}
$mebel = pop @pokoj;
print "Wyrzucilem przez okno: $mebel\n";
pętla typuforw takiej postaci jest znana z języków
podobnych do C
print "Pokoj zawiera nast. meble: ";
10 print join(", ", @pokoj)."\n";
1 for(pierwsza i.; warunek; i. iterowana) {
}
block
}
Zmienna@pokojużyta w kontekscie numerycznym jest
interpretowana jako liczba elementów
pętla typuforeachjest konstrukcją typową dla Perla
funkcjapopusuwa ostatni element z podanej tablicy i zwraca
1 foreach $element (lista) {
ten element
block
Pętlawhiledziała dopóki warunek jest prawdziwy, tzn. póki
}
tablica@pokojzawiera więcej niż dwa elementy
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 17/24 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 18/24
Pętlafor- przykład Pętlaforeach- eksperymenty psycholingwistyczne
1 for($i = 0; $i < 10; $i++) {
print "Wartość \$i to: $i\n";
Dla przykładu pętliforeachposłużymy się pewnym
}
eksperymentem psycholingwistycznym. Napiszemy program
Program podobny dowhile.pl :
generujący wszystkie sylaby pewnego polinezyjskiego języka o
nazwie Tulu
1 @pokoj = qw(krzeslo stol lozko szafa);
print "Pokoj zawiera nast. meble: ";
W tym języku wszystkie sylaby mają postaćCVz ograniczonego
print join(", ", @pokoj)."\n";
zestawu spółgłosek i samogłosek:
5 for($i = pop @pokoj; @pokoj > 1; $i = pop @pokoj) {
{a, e, i, k, l, m, o, p, t, u}
print "Wyrzucilem przez okno: $i\n";
Sylaby będą wyglądały np. tak: po, ta, ku, me
print "Pokoj zawiera nast. meble: ";
print join(", ", @pokoj)."\n";
10 }
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 19/24 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 20/24
Pętlaforeach- eksperymenty psycholingwistyczne Pętlaforeach- eksperymenty psycholingwistyczne
Teraz napiszemy program, który generuje wszystkie wyrazy Tulu.
Każdy wyraz ma postać CVCV. Jak tego dokonać?
1 @consonants = qw(k l m p t);
1 @consonants = qw(k l m p t);
@vowels = qw(a e i o u);
@vowels = qw(a e i o u);
5 foreach $c (@consonants) {
5 foreach $c1 (@consonants) {
foreach $v (@vowels) {
foreach $v1 (@vowels) {
print("$c$v\n");
foreach $c2 (@consonants) {
}
foreach $v2 (@vowels) {
}
print("$c1$v1$c2$v2\n");
10 }
}
}
}
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 21/24 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 22/24
Pętlaforeach- eksperymenty psycholingwistyczne Pętlaforeach- eksperymenty psycholingwistyczne
Zasady morfofonologiczne Tulu narzucają nam dodatkowe
Kolejna reguła morfofonologiczna jęzka Tulu mówi, że spółgłoski
ograniczenie. Wszystkie samogłoski danego wyrazu muszą być
muszą być różne. Tzn. ciągi typu tutu, papa itd. nie są
takie same, np. paka, tulu
poprawnymi słowami języka Tulu
1 @consonants = qw(k l m p t);
1 @consonants = qw(k l m p t);
@vowels = qw(a e i o u);
@vowels = qw(a e i o u);
5 foreach $c1 (@consonants) {
5 foreach $c1 (@consonants) {
foreach $v (@vowels) {
foreach $v (@vowels) {
foreach $c2 (@consonants) {
foreach $c2 (@consonants) {
print("$c1$v$c2$v\n") if($c1 ne $c2);
print("$c1$v$c2$v\n");
}
}
10 }
10 }
}
}
Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 23/24 Marcin Junczys-Dowmunt Narzędzia informatyczne w językoznawstwie 24/24
Wyszukiwarka
Podobne podstrony:
Wyklad04 2008 handoutWyklad1 2008 handoutWyklad03 2008 handoutWyklad2 2008 handoutPoprzedni rok ETYKA WYKLADY 2008 czarno bialeWyklad xmlparse handoutWyklad04 2008Wyklad V 2008wyklady 2008 urban i plan przestrzWyklad5 2008RACHUNKOWOSC WYKLAD 2008Rynki finansowe WYKŁAD 2008Wyklad03 2008Wyklad2 2008Wyklad05 2008Wyklad I 2008wykład t i 2008 1wyklad 7 emocje stres niestacjonarne WSEiP 16 2008więcej podobnych podstron