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.
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.