Logo (programski jezik)

S Vikipedije, slobodne enciklopedije
Kornjača grafika Logo jezika

Logo (engl. Logo) je programski jezik visokog nivoa koji se bazira na funkcionalnom načinu programiranja. Nastao je iz programskog jezika Lisp i može da se smatra njegovim dijalektom. Logo jezik je blisko povezan sa Logo porogramskim okruženjem koje omogućava visok stepen interaktivnosti u radu. Sastavni deo Logo jezika je kornjača grafika, grafički sistem koji se lako uči kao i celokupan jezik.

Logo je nastao 1967. godine. Kreiran je sa ciljem da bude obrazovno sredstvo i to ne samo u oblasti programiranja. Njegovi tvorci su Daniel G. Bobrow, Wally Feurzeig i Simor Papert.

Zdravo svete[uredi | uredi izvor]

Sledeći kod će ispisati "Zdravo svete!" u interaktivnom načinu rada:

PRINT [Zdravo svete!]

Procedura sa imenom Pozdrav, koja ima isto dejstvo kao i kod iznad, može da izgleda ovako:

TO Pozdrav
  PRINT [Zdravo svete!]
END

Kornjača grafika[uredi | uredi izvor]

Prvobitno Logo nije imao grafičke mogućnosti. Zatim mu je pridodat uređaj, vrsta robota, koji je nazvan kornjača (engl. turtle). Ovaj uređaj je bio povezan sa računarom i njime se upravljalo naredbama Logo programskog jezika. Kornjača je mogla da se kreće po horizontalnoj podlozi napred nazad i da menja smer i pravac kretanja. Ukoliko bi se postavio list papira ispod kornjače ona je mogla da ostavlja trag formirajući grafiku koja je nazvana kornjača grafika (engl. turtle graphics).

Kasnije, naredbe Logo jezika za pokretanje kornjače su ostale, ali je kornjača postala virtuelan objekat na ekranu računara. I ako se ovaj oblik grafike često veže za Logo jezik, u okviru koga je i nastao, on postoji i u drugim programskim jezicima kao što su Smalltalk, Piton, Java...

Primer kornjača grafike[uredi | uredi izvor]

Na slici ispod nalazi se jednostavan primer kornjača grafike zajedno sa odgovarajućim Logo naredbama, desno, koje je formiraju. Primer odgovara UCBLogo Logo razvojnom okruženju kao i ostali primeri ukoliko nije drugačije navedeno:

Ovde je kornjača predstavljena u pojednostaljvljenom obliku kao jedan jednakokraki trougao. Kornjača se prvobitno nalazi na sredini prozora za grafiku, gde se nalazi i tačka (0, 0) Dekartovog koordinatnog sistema. y-osa je usmerena „naviše“ kao i sama kornjača. Prva naredba će okrenuti kornjaču udesno za 90 stepeni, odnosno promeniti joj smer tako da gleda u pravcu x-ose. Sledeća naredba pomera kornjaču za 100 jedinica po x-osi ostavljajući trag. (Koordinatne ose su nevidljive). Zatim se okret i pomeranje ponavljaju... Posle četiri ponavljanja ovog para naredbi (right 90 forward 100) kornjačin trag će formirati kvadrat a konjača će se naći u početnom položaju (uključujući pravac i smer). Na kraju kornjača još jednom ide 100 jedinica napred i iscrtava vertikalnu liniju van kvadrata na čijem kraju možemo da vidimo njenu simboličnu predstavu u obliku trouglića.

Gornji grafički primer je formiran jedino grafičkim naredbama. Upotrebom kontrolne strukture repeat ista grafika može da se dobije izvršavanjem sledećeg koda:

repeat 4 [right 90 forward 100]
forward 100

Kornjača grafika je vrsta vektorske grafike. Položaj crteža u gornjem primeru zavisi od početnog položaja, pravca i smera kornjače. U ovom primeru podrazumevao se početni položaj kornjače po inicijaciji Logo grafičkog okruženja.

Sintaksa[uredi | uredi izvor]

Osnove sintakse logo jezika su izvedene iz Lisp programskog jezika, uz dodatno uproštenje: mogućnost izostavljanja zagrada. Odatle neki Logo zovu Lisp bez zagrada (odnosi se na male, oble zagrade). Moguće je pisti i sa zagradama. Na primer sledeći kod ispisuje broj jedan:

(print 1)

i bez zagrada:

print 1

Male zagrade su neophodne kod funkcija i procedura koje mogu da budu pozivane sa različitim broje parametara. Tada postoji samo jedna varijanta poziva kod koje nisu potrebne zagrade. U svim ostalim slučajevima zagrade se koriste.

Na primer, print može da bude pozvana sa neograničenim brojem parametara, ali zagrade mogu da se izostave jedino ako je predat jedan parametar:

(print 1 2)

ispisaće brojeve jeda i dva, ali sada su male zagrade neophodne.

Tipovi podataka[uredi | uredi izvor]

Gotovo sve verzija Logo jezika sadrže bar tri tipa podataka: brojeve, reči i liste. Većina sadrži i asocijativne nizove.

Brojevi[uredi | uredi izvor]

Brojevi u Logo jeziku imaju decimalni oblik ili/i se nalaze u eksponencijalnom zapisu. Interno se koristi oblik sa pokretnim zarezom. Primeri brojeva:

23
 4.35
-8
12е-9

Sledeća naredba:

print 2000000

ispisaće

2000000

dok će

print 2000000000000000000000000000000

ispisati

2е+30

odnosno: dva puta deset na trideseti stepen.

Reči[uredi | uredi izvor]

Reči su nizovi znakova. Sintaksno se razlikuju od drugih tipova podataka jer počinju dvostrukim navodnikom. Primeri reči:

"Јабука
"Jabuka
"jedan@dva.org

Izvršavanjem sledećeg koda:

print "мислим

ispisaće se:

мислим

dok će sledeći kod:

print "мислим"

ispisati:

мислим"

Moguće je dobiti i reči koje sadrže znak praznine.

Liste[uredi | uredi izvor]

Liste su, sintaksno posmatrano, spiskovi brojeva, reči ili drugih lista unutar uglastih zagrada. Ne moraju da budu homogene. Primeri:

[један два три]
[1 2 3]
[један 2 три 4 5]
[један [11 12] [једанаест дванаест [101]]]

Prazna lista:

[]

Promenljive i naredba dodele vrednosti[uredi | uredi izvor]

Promenljive u Logo jeziku su reči (podaci tipa reč) kojima je pridružena vrednost. Nad ovim rečima možemo da primenimo sve funkcije koje odgovaraju i običnim rečima. Tokom izvršenja programa moguće je promeniti vrednost promenljive. Nova vrednost može da bude različitog tipa (od prethodno dodeljenog). Promenljive se ne deklarišu izuzev lokalnih promenljivih unutar procedura.

U sledećem primeru, reči jedan_broj se pridružuje vrednost 56:

make "jedan_broj 56

Funkcija thing nam omogućava da pristupimo pridruženoj vrednosti:

print thing "jedan_broj

će ispisati:

56

Sledi kod koji reči jedna_reč pridružuje reč jedan_broj:

make "jedna_reč "jedan_broj

Ako izvršimo sledeći red:

print thing "jedna_reč

ispisaće se:

jedan_broj

dok će naredni kod

print thing thing "jedna_reč

ispisati

56

odnosno sadržaj promenljive jedan_broj.

Vrednost promenljive može da se dobije i pisanjem dvotačke ispred reči koja predstavlja promenljivu:

make  "резултат 3 + 2
print :резултат

ispisaće:

5

slično kao i sledeći kod:

make  "резултат 3 + 2
print thing "резултат

Proceduralnost[uredi | uredi izvor]

I ako najveći deo osnove jezika čine funkcije, Logo nije pravi funkcionalni jezik. Između ostalog, Logo poseduje naredbu dodeljivanja vrednosti i mogućnost kreiranja procedura. Pisanje procedura je osnovni način proširivanja jezika.

Procedure imaju jednostavnu sintaksu. Između reči to i end upisuje se kod koji treba da se izvrši. Neposredno iza to nalazi se ime procedure iza koga opciono mogu da se nađu formalni parametri.

Primer procedure, koja iscrtava kvadrat sa stranicom dužine 100 jedinica:

to kvadrat1
  repeat 4 [right 90 forward 100]
end

Malo apstraktnija procedura, koja crta kvadrat, čija je stranica proizvoljne date dužine dužina, može da izgleda ovako:

to kvadrat2 :dužina
  repeat 4 [right 90 forward :dužina]
end

Procedure mogu i da vrate vrednost, kada u stvari dobijamo (ili) funkciju ili funkcijsku proceduru. Sledi primer funkcije koja za dati broj vraća taj broj uvećan za jedan:

to uvećanik :n
  output :n + 1
end

Proširivost[uredi | uredi izvor]

Lako je nadograditi programski jezik Logo. U ovu svrhu se obično koriste procedure. Moguće je čak kreirati nove kontrolne strukture, što je veoma teško, ili gotovo nemoguće, u većini danas popularnih programskih jezika.

Sam Logo sadrži veliki broj kontrolnih struktura tako da ću u sledećem primeru samo ponovo da definišem već korišćenu repeat ponavljačku strukturu (petlju) ali sa drugim imenom. Nazvaću je ponovi:

to ponovi :brojPonavljanja :posao
  repeat :brojPonavljanja :posao
end

Procedura ponovi nije u potpunosti ekvivalntna kontrolnoj strukturi repeat, ali omogućava da kvadrat nacrtam na sledeći način:

ponovi 4 [right 90 forward 100]

Rekurzija[uredi | uredi izvor]

Rekurzivna spirala

Programski jezik Logo omogućava i podstiče rekurzivni način pisanja programa. Svaka procedura može da sadrži rekurzivne pozive.

Poseban oblik rekurzije je repna rekurzija, kod koje se rekurzivni poziv javlja na kraju procedure ili funkcije. Ovaj ovlik rekurzije se lako pretvara u iterativni postupak. Logo interpretator bi trebalo da ume da prepozna i optimizuje ovakav kod, izostavljajući alokaciju prostora na steku za povratnu adresu, parametre i lokalne promenljive (pri rekurzivnom pozivu).

Primer repne rekurzije[uredi | uredi izvor]

Sledeća procedura koristi repnu rekurziju:

to spirala :korak
  if  :korak > 30 [stop]    ; Услов за излаз из процедуре
  forward :korak right 15
  spirala :korak * 1.02     ; Рекурзивни позив
end

Ako ovako definisanu proceduru pozovemo sa, na primer:

spirala 10

dobićemo crtež sličan spirali.

Primena u obrazovanju[uredi | uredi izvor]

Jedan od ciljeva koji je postavljen kada je stvaran Logo jezik je da bude uspešno obrazovno sredstvo. Danas Logo poseduje osobine koje ga svrstavaju u sam vrh u ovoj oblasti:

  • Lako se uči.
    • Ima jednostavnu sintaksu koja omogućava da i deca u osnovnoj školi sa lakoćom mogu da počnu da ga koriste.
    • Pri razvoju programa programeru pruža lako shvative povratne informacije.
  • Pruža velike izražajne mogućnosti.
    • Jezik je lako poširiv. Pojam porcedure može da se uvede veoma brzo, obično na drugom nastavnom česu.
    • Kornjača grafika omogućava, programeru na uzrastu deteta, kreiranje geometrijskih formi za kakve bi u drugom sistemu bilo potrebno poznavanje matematike na akademskom nivou.
    • Omogućava kreiranje novih jezičkih konstrukcija kao što su kontrolne strukture, što je praktično nemoguće u programskim jezicima koji se najčešće koriste u nastavi u školama u Srbiji kao što su Paskal, Java, Ce ili u nekoj varijanti BASIC programskog jezika.
    • ...


Postoje posebno razvijene varijante Logo jezika koje su namenjene za simuliranje složenih sistema. I ako se obično koriste u obrazovanju na akademskom nivou, lakoća korišćenja ovih jezika omogućava njihovo korišćenje i na nižem obrazovnom nivou. Poznati primeri ovakvih varijanti Logo jezika su StarLogo i NetLogo. Primenjuju se za kreiranje simulacija sistema u mnogim oblastima uključujući društvene sisteme, biološke sisteme, sisteme koji se proučavaju u fizici, hemiji, psihologiji...

Spoljašnje veze[uredi | uredi izvor]