250 likes | 384 Views
Il LOGO. la programmazione è un gioco! nessuna pretesa da ingegneria del sw. Caratteristiche generali. Linguaggio interpretato Scritto su linee. Ogni linea è una chiamata di funzione di tipo Comando (con effetti ma senza valore) print,.. Operazione (con valore come output) sum, list,..
E N D
Il LOGO la programmazione è un gioco! nessuna pretesa da ingegneria del sw
Caratteristiche generali • Linguaggio interpretato • Scritto su linee. Ogni linea è una chiamata di funzione di tipo • Comando (con effetti ma senza valore) print,.. • Operazione (con valore come output) sum, list,.. • Un sottoinsieme di operazioni è costituito dai predicati che assumono il valore truefalse
CiaoMondo!! • label “ciaomondo!! • Scegliere la grandezza, il colore della penna e scrivere • repeat 36 [label "ciaomondo!! rt 10 setpencolor repcount]
Introduzione concetti: procedura • TO BOX • REPEAT 4 [FD 100 RT 90] • END • E se vogliamo 2 quadrati? • TO BOXES • REPEAT 4 [FD 100 RT 90] • RT 90 PU FD 120 PD LT 90 • REPEAT 4 [FD 100 RT 90] • END
Introduzione variabili • E se devono essere tanti? E di grandezza qualunque? • Studio delle figure poligonali e “geometria della tartaruga”. • Vediamo qualche cammino.
Qualche cammino • repeat 4 [fd 50 rt 90] • repeat 5 [fd 50 rt 72] • repeat 6 [fd 50 rt 60] • repeat 5 [fd 50 rt 144] • repeat 3 [fd 50 rt 120] • Può la tartaruga decidere che il cammino si chiude?
Generalità • Le espressioni possono essere primitive o definite dall’utente. • Possono avere 0, 1, più parametri • Si usa la notazione infissa • Sum :x :y • ….
I dati • Possono essere • Parole • Liste • Vettori • I numeri sono casi particolari di parole. • Non c’è il sistema forte dei tipi: l’interprete lo decide dal contesto.
I dati • due simboli particolari • : per indicare “il contenuto di ..” • Si tratta di un uso molto utile per ricordare allo studente il concetto di variabile. • Quotazione o “ • Si tratta di un simbolo che indica nessuna valutazione. • Il numero è un caso speciale di autovalutazione “2 2
Assegnamento • make “x sum :y 3 • ha due parametri. L’effetto sta nel porre nel primo parametro la valutazione del secondo • Sum :y 3 • dove si indica di effettuare la somma tra il contenuto di y e il numero 3 • Il secondo parametro è passato per valore, il primo per indirizzo
Assegnamento • Indirizzamento indiretto • make "x 45 • make :x 3 • print :45 • Scoping • Le variabili non devono essere dichiarate e sono globali. Possono essere dichiarate locali a una procedura e vale lo scoping dinamico. • I parametri delle procedure creano variabili locali
Liste • Rispetto ai vettori sono espandibili • first, last, butfirst, butlast, member, item. • sentencefput, lput • Coda con le operazioni queue, dequeue, • Stack con le operazioni push and pop • La ricorsione è il modo naturale di trattare con le liste.
Strutture di controllo • ifelse test [ do if true list ] [do if false list] • repeat number [instruction list] • Altre istruzioni iterative ma si raccomanda l’uso ricorsivo
Esempi • make "stati [italia francia spagna] • label :stati • Oppure • label thing “stati • label first :stati • pr first [italia francia spagna] • pr last [italia francia spagna] • pr butfirst [italia francia spagna] • show butfirst [italia francia spagna] • ct
Esempi • make first [gatto cane] first [Meo Lilli] • pr :gatto • ?? • make "Meo "gatto • pr :meo • ?? • make :meo "graffia • pr :gatto ( o pr thing :meo) • ??
Esempi • for [red 0 255] [for [green 0 255] [setpixel (list :red :green 0) fd 1] bk 256 rt 90 fd 1 lt 90]
Strutture di controllo • OPERAZIONE [una lista di comandi] [vari dati] • show map [? * ? ] [ 5 6 7 ] • [25 36 49]
Esempio to vai ;sceglie un punto sullo schermo pu setxy -250 + random 500 -150 + random 300 pd rt random 360 ;sceglie l'inclinazione end
Esempio to galassia :num ;traccia ‘:num’ stelle repeat :num [ vai star random 50 ] ;di ampiezza arbitraria end to star :size repeat 5 [fd :size rt 144 ] end
Indici dei Colori • 0 -> [ 0 0 0] • 1 -> [ 0 0 255] • 2 -> [ 0 255 0] • 3 -> [ 0 255 255] • 4 -> [255 0 0] • 5 -> [255 0 255] • 6 -> [255 255 0] • 7 -> [255 255 255] • 8 -> [155 96 59] • 9 -> [197 136 18] • 10 -> [100 162 64] • 11 -> [120 187 187] • 12 -> [255 149 119] • 13 -> [144 113 208] • 14 -> [255 163 0] • 15 -> [183 183 183]
Altro esempio to segna_percorso setpc 4 setpensize [ 20 20 ] rt 60 fd 60 rt 40 fd 120 rt 100 fd 150 rt 90 fd 120 rt 65 fd 80 end Una "strada" su un burrone! Costringiamo dentro la tartaruga
Metodologie interessanti • to cambia_direzione • bk 1 rt 30 • end • to controlla • pu fd 1 • output pixel • end • to cammina • bk 1 pd fd 1 • end
Funziona? • to segui_traccia • setpc 0 • setpensize [ 1 1 ] • repeat 10000 [ • ifelse or ( 4 = controlla ) ( 0 = controlla ) • [cammina] [ wait 5 cambia_direzione ] • ] • end
Lezione appresa • Scrivere bene i controlli • Anche la correzione non è soddisfacente. • Un po’ di fantasia non guasta!! • windowcreate "uno "finestra "titolo 0 0 100 100 [] • windowcreate "finestra "finestramia "titolo 25 25 50 25 [] • staticcreate "finestramia "static1 [Heading=0] 25 25 50 25 • repeat 72 [rt 5 staticupdate "static1 se [Heading=] heading wait 60] • windowdelete “finestra
Esempio to usofinestre local "wnx make "wnx 100 local "wny make "wny 90 local "marx make "marx 5 local "mary make "mary 20 local "sizx make "sizx 10 local "sizy make "sizy 10 windowcreate "main "earth [Saluto] 0 0 :wnx :wny [] buttoncreate "earth "bm "* :marx+:sizx*4 :mary+:sizy*1 :sizx :sizy [galassia 50] staticcreate "earth "bw [Hello World] 25 50 50 25 staticcreate "earth "bt bf time 25 5 50 25 end windowdelete "earth