1.5.16       LOGO

Il LOGO ha origine nel 1967 da un gruppo di lavoro cui partecipavano, fra gli altri, Seymour Papert e Wallace Feurzeig, presso l'istituto di ricerca BBN a Cambridge, Massachussets. Successivamente lo sviluppo proseguì con Papert al MIT.

Lo scopo di LOGO, il cui slogan è "un linguaggio per imparare", è di aiutare i bambini a familiarizzare con la programmazione o più semplicemente ad imparare la matematica ed a sviluppare un miglior modo di pensare. LOGO si propone come linguaggio facile da apprendere e da usare ma anche potente ed in grado di svolgere compiti complessi.

La caratteristica principale di LOGO è la gestione della grafica: l'utilizzatore fa muovere (comandi FORWARD e BACK) e ruotare (comandi RIGHT e LEFT) una "tartaruga" sul video, e questa, movendosi lascia una traccia, ad esempio l'ordine alla tartaruga di disegnare un pentagono di lato 200 unità è:

repeat 5 [forward 200 right 72].

Si possono creare procedure (ma non funzioni), tramite il comando TO nomeprocedura parametri ... END; le variabili sono globali, a meno che siano dichiarate LOCAL, in questo caso sono però accessibili dalle eventuali subroutines.

Nel'esempio seguente vi è la realizzazione di un algoritmo per calcolare la radice quadrata (esiste come istruzione primitiva SQRT n o POWER n 0.5).

TO RADQUAD :t :z ; dichiarazione della procedura

LOCALMAKE "xm :t / 2

LOCALMAKE "x1 1

LOCALMAKE "x2 :t

WHILE [OR ((:xm * :xm - :t ) > 0.01)  ((:xm * :xm - :t ) < -0.01)] ~

  [IFELSE (:xm * :xm > :t) [MAKE "x2 :xm] [MAKE "x1 :xm] ~

  MAKE "xm ((:x1 + :x2) / 2)]

MAKE :z :xm

END

LOGO utilizza strutture a liste per memorizzare dati e programmi; in alcune istruzioni con più argomenti questi sono forniti in forma di lista, ad esempio WHILE la cui sintassi è WHILE [condizione] [istruzioni]. Qui di seguito il comando per visualizzare la lista della procedura di cui sopra e la lista stessa.

show text "radquad

[[t z]

[LOCALMAKE "xm :t / 2]

[LOCALMAKE "x1 1]

[LOCALMAKE "x2 :t]

[WHILE [OR ((:xm * :xm - :t ) > 0.01) ((:xm * :xm - :t ) < -0.01)]

[IFELSE (:xm * :xm > :t) [MAKE "x2 :xm] [MAKE "x1 :xm]

MAKE "xm ((:x1 + :x2) / 2)]]

[MAKE :z :xm]]

L'esempio che segue è un programma che disegna la funzione y = ln(x), e ricerca la coordinata dell'intersezione della curva con l'asse x, mediante il metodo delle tangenti[1].

HOME                                    ; al centro del video grafico

CLEARSCREEN                             ; pulizia schermo

SETSCREENCOLOR [255 255 255]            ; schermo bianco

; preparo assi -----------------------------------

; ogni punto equivale a 0.01 unità

SETPENCOLOR [255 000 000]         ; rosso per gli assi

PENUP                                   ; alzo la penna

;SETPOS LIST (0) (-300)

SETPOS [0 -300]

PENDOWN

FD 590

PENUP SETPOS [-90 0]

PENDOWN

RT 90 FD 580

; disegno curva y = ln(x) logaritmo naturale -----

SETPENCOLOR (LIST 000 255 000)    ; verde per la curva

PENUP

MAKE "x 0.05

SETPOS LIST(:x * 100 ) (100 * LN :x)

PENDOWN

REPEAT 490 [(MAKE "x :x + 0.01) ~

           (MAKE "y LN :x)      ~

            SETPOS LIST(:x * 100) (:y * 100)]

; disegno tangenti approssimanti l'intersezione con asse x -----

SETPENCOLOR [000 000 255]         ; blu per tangenti          

MAKE "x 0.04

WHILE [(LN :x) < -0.001]          ~

  [MAKE "x1 :x - (LN :x) * :x     ~

   LINEA (LIST 100 * :x 100 * LN :x 100 * :x1 0)  ~

   MAKE "x :x1] 

HIDETURTLE                        ; nasconde la "tartaruga"

SETPENCOLOR [0 0 0]               ; nero per le scritte

SETXY 100 200

LABEL [Grafico di ln(x)]

L'istruzione MAKE crea una variabile, la sua sintassi è MAKE "nomevariabile valore. Per accedere al valore della variabile si usa il comando THING "nomevariabile abbreviato in :nomevariabile. Una lista è dichiarabile esplicitamente solo se è formata da costanti, altrimenti va costruita tramite l'istruzione LIST.

L'utilizzo della grafica è, come si può vedere dagli esempi, abbastanza intuitivo, meno intuitivo è il trattamento delle variabili e delle liste, e la coesistenza di istruzioni con argomenti sotto forma di lista con altre con argomenti singoli come ad esempio le istruzioni SETPOS [x y ] e SETXY x y.

 

1.1.1.1       Altre versioni di LOGO

I vari dialetti di LOGO differiscono, oltre che per le funzioni implementate, anche per il nome di qualche comando.

MSW Logo è la versione di Berkely LOGO arricchita da George Mills con la gestione di interfacce grafiche (GUI), supporto di periferiche multimediali, tartarughe multiple, spostamenti in 3D (comando PERSPECTIVE).

StarLogo sviluppata ai Media Laboratory, MIT, Cambridge, Massachusetts, con il supporto della National Science Foundation e del LEGO group, è una versione specializzata di LOGO, con tartarughe multiple, programmabili. StarLogo si presta allo studio del comportamento dei sistemi autoorganizzati: sciami di uccelli, ingorghi del traffico, colonie di formiche, ecc….

 



[1] O metodo di Newton. Si parte da un opportuno punto x0, le successive approssimazioni sono date dalla formula xi+1 = xi – f(xi)/f'(xi) , dove f'(x) è la derivata di f(x). La derivata di ln(x) è 1/x.