Categoria: Programmazione
Logo - A language for learning
Supporto: Cartuccia e Floppy Disk (2).
Programmatore Capo: Leigh Klotz, Jr
Programmatori di supporto: Andy Finkel (Commodore), John Cox, Patrick Sobalvarro and Devon McCullough (Terrapin)
Traduzioni: Inglese, Francese e Italiano
(c) MIT, 1981
(c)Commodore Business Machine Inc., 1983
(c)Terrapin Inc.
L’ambiente grafico
A chi lo ha usato, il LOGO sarà rimasto sicuramente impresso per l’ambiente grafico che lo caratterizza. L’elemento rappresentativo di tale ambiente è la classica tartaruga: uno sprite a forma di triangolo, che si muove nello schermo secondo i comandi che gli vengono impartiti. Nel muoversi, essa lascia una traccia che andrà a costituire il disegno dell’utente.
All’inizio, il modo grafico non è attivato e la tartaruga non è visibile. Per attivarlo, scrivere il comando DISEGNA e premere RETURN.
A questo punto, sarà visibile la seguente schermata:
Lo schermo è diviso in due modalità grafiche: in alto, la modalità bit-map alta risoluzione; in basso, la modalità testo alta risoluzione. La tartaruga è quello sprite bianco triangolare posto al centro dello schermo.
Nell’ambiente LOGO, per disegnare occorre comunicare alla tartaruga il proprio angolo di inclinazione rispetto alla posizione corrente della tartaruga (angolo di rotazione relativo) e di quanti passi deve spostarsi.
Così, volendo orientare la tartaruga di 90° a destra (rotazione in senso orario), utilizzeremo il seguente comando:
DESTRA 90
A questo punto, supponiamo di voler fare avanzare la tartaruga di 60 passi; si deve usare il comando AVANTI, come segue:AVANTI 60
Come si può vedere, è stato tracciato, a partire dal centro dello schermo, un segmento lungo 60 pixel. Supponendo di voler costruire un quadrato, possiamo dare i seguenti comandi ulteriori:
DESTRA 90
AVANTI 60
DESTRA 90
AVANTI 60
DESTRA 90
AVANTI 60
Si è così ottenuto un quadrato di lato 60 pixel:
Per cancellare lo schermo, utilizziamo il comando:
PULISCISCHERMO
L’istruzione RIPETI
L’istruzione RIPETI ci permette di evitare le ripetizioni fatte in precedenza, consentendo di ripetere l’esecuzione di una certa operazione (racchiusa fra parentesi quadre) per un numero specificato di volte. Il formato di questa istruzione è:
RIPETI n [istruzioni]
Così, volendo disegnare il quadrato precedente:
RIPETI 4 [DESTRA 90 AVANTI 60]
Ulteriori comandi
Il comando SINISTRA è analogo al comando DESTRA, ma la rotazione avviene in senso antiorario. Il comando INDIETRO è l’opposto del comando AVANTI, e consente di spostare la tartaruga indietro del numero di passi specificati.
NOTA: con il comando AVANTI, la tartaruga si sposta verso la direzione verso la quale è diretta la propria punta; con il comando INDIETRO, la tartaruga si sposta nella direzione opposta.
Abbreviazioni dei comandi visti
AVANTI si abbrevia con A;
INDIETRO si abbrevia con I;
DESTRA si abbrevia con D;
SINISTRA si abbrevia con S;
PULISCISCHERMO si abbrevia con PS.
L’ambiente di editazione
Finora abbiamo operato nel modo immediato, fornendo al computer dei comandi da eseguirsi immediatamente. Il LOGO, come un qualsiasi linguaggio di programmazione, consente di scrivere programmi che possono essere salvati su disco ed essere utilizzati in seguito. Per accedere all’editor di programma del LOGO, è possibile utilizzare il comando EDITA. Così, trovandoci nell’ambiente grafico/testuale, basterà battere il comando EDITA, per entrare nell’editor.
Questo ambiente può essere utilizzato, fra l’altro, anche come editor di testo.
Nel LOGO, a differenza del BASIC, non si hanno le linee numerate (label numerici).
Struttura di un programma LOGO
La dicitura "programma", nel LOGO, è da ritenersi impropria. Il linguaggio vede ciascun programma come una nuova istruzione, che si aggiunge a quelle preesistenti (dette "primitive"); così, si suole dire che un programma scritto dall’utente costituisce una nuova primitiva, e cioè una procedura. Questa sarà richiamabile in ogni momento dall’utente, specificandone il nome e di seguito l’eventuale argomento.
Possiamo considerare un "programma" LOGO costituito da tre parti:
- parte dichiarativa: inizia con l’istruzione PER seguita dal nome della nuova primitiva;
- parte contenente le linee di programma;
- parte finale: contiene la parola FINE, che indica al LOGO la fine della primitiva.
Supponiamo di volere scrivere una primitiva che disegni un quadrato di lato 60. Nell’editor, scriviamo il testo riportato in figura:
Ora, premiamo CTRL e C per definire la primitiva. Dopo una breve attesa, il LOGO ci comunicherà che la nuova primitiva è stata definita. A questo punto, se scriviamo QUADRATO,
verrà chiamata la nuova primitiva è il quadrato di lato 60 verrà tracciato.
Da ciò emerge come il linguaggio LOGO possa essere ampliato con una facilità eclatante. E’ da osservare, infatti, come la procedura QUADRATO sia una nuova istruzione a tutti gli effetti e possa essere usata anche all’interno di un qualsiasi altro "programma".
Supponiamo di volere scrivere una procedura che disegni due quadrati di lato 60 affiancati. Perché non utilizzare la procedura precedentemente definita?
Scriviamo così il seguente programma:
PER QUADRATI
TANA
PS
QUADRATO
S 90
QUADRATO
FINE
L’istruzione TANA serve per riportare la tartaruga sempre al centro dello schermo, a prescindere da dove si trovi. La successiva istruzione PS cancella qualsiasi traccia che potrebbe essere stata lasciata dalla tartaruga nel riposizionarsi.
Definendo (CTRL e C) e richiamando (digitando QUADRATI) la primitiva, si otterrà, se tutto è stato digitato correttamente, quanto segue:
Utilizzo delle variabili
Cosa fare se si desidera disegnare un quadrato di lato avente una lunghezza a scelta dell’utente (o comunque del chiamante)? Il seguente programma fornisce la risposta:
PER QUADRATO :LATO
TANA
PS
RIPETI 4 [A :LATO D 90]
FINE
La variabile è la parola LATO; il LOGO capisce che essa è una variabile e non una primitiva grazie alla presenza dei due punti. Questi vanno sempre posti davanti alle variabili, senza alcuno spazio a seguire. Così, una volta definita questa nuova primitiva (procedura), per disegnare un quadrato di lato 100 basterà scrivere:
QUADRATO 100
Un esempio sull’uso delle variabili
Supponiamo di voler realizzare questo disegno:
Si tratta di 10 quadrati contenuti uno dentro l’altro; il più piccolo ha lato 10. Il più grande ha lato 100. I lati crescono in ragione di 10. Così, il primo quadrato ha lato 10, il secondo lato 20, …fino all’ultimo che ha lato 100. Potremmo usare le seguenti procedure:
In questo modo si ottiene il risultato voluto, ma non certo in maniera elegante. Infatti, se si desiderano altre dimensioni dei quadrati, occorre modificare tutti i numeri nelle chiamate a QUADRATO. Volendo disegnare un numero diverso di quadrati, occorre ancora editare la procedura ed apportare le modifiche. Infine, se si vuole modificare l’incremento della dimensione dei lati (10) in un altro valore, occorre modificare ancora tutte le chiamate.
L’istruzione ASSEGNA consente di attribuire ad una variabile un determinato valore (che può essere anche un’altra variabile). Così, l’istruzione:
ASSEGNA "CASA 3
Assegna alla variabile CASA il valore 3.
Le seguenti procedure consentono di tracciare il disegno precedente utilizzando un codice più flessibile ed intelligente.
Nota: il punto esclamativo (!) viene visualizzato automaticamente dall’editor quando una linea di testo supera i 40 caratteri.
Una volta definite le procedure (CONTROL e C), il disegno precedente viene tracciato scrivendo:
QUADRATI 10 100 10 (prestare attenzione agli spazi).
Gli argomenti rappresentano, nell’ordine:
- la lunghezza del lato del quadrato più piccolo;
- la lunghezza del lato del quadrato più grande;
- la quantità della quale deve essere incrementata la lunghezza del lato per ogni quadrato che viene disegnato.
Abbiamo reso la procedura QUADRATI flessibile, in modo da poter disegnare un diverso numero di quadrati. Così, scrivendo:
QUADRATI 10 50 10
vengono disegnati cinque quadrati l’uno dentro l’altro.
A questo punto, potete sperimentare la procedura QUADRATI per diversi valori dei parametri.
Come salvare il proprio lavoro
I comandi CONSERVA , CATALOGO, RECUPERA e CANCEARC
Il LOGO qui presentato consente di memorizzare il proprio lavoro solo su disco.
Il comando CONSERVA permette di memorizzare su disco le procedure editate e residenti in memoria. Tutte queste procedure vengono raccolte in un file archivio di estensione .LOGO (anche se, in realtà, il Commodore DOS continua ad attribuire l’estensione PRG; l’estensione .LOGO è di comodo, ma di fatto fa parte del nome del file .PRG).
Il formato è il seguente:
CONSERVA "nomearchivio
Ad esempio, se si scrive:
CONSERVA "ESERCIZIO"
Tutte le procedure scritte dall’utente vengono memorizzate nel file ESERCIZIO.LOGO.
Volendo invece memorizzare soltanto alcune procedure, il comando assume il seguente formato:
(CONSERVA "nomearchivio [procedura1 procedura2 …])
Notare le parentesi, che sono obbligatorie.
Il comando CATALOGO consente di visualizzare gli archivi contenuti nel disco (equivale al comando LOAD "$",8 del CBM BASIC, oppure al comando >$, se si utilizza il DOS wedge Commodore). CATALOGO non altera il contenuto della memoria in alcun modo (a differenza di LOAD "$",8, che cancella il programma BASIC residente in memoria).
Digitando:
CATALOGO
compare l’usuale lista, simile alla seguente:
Viene prima mostrata l’etichetta del disco, poi, per ciascun file, il numero di blocchi che occupa e l’estensione CBM DOS (PRG). Si ricorda che un blocco equivale a 256 byte.
Il comando RECUPERA carica l’archivio specificato in memoria, provvedendo a definire tutte le procedure contenute in esso. Il formato è:
RECUPERA "nomearchivio
Il comando CANCEARC consente di cancellare dal catalogo (directory) un archivio (file .LOGO) non più desiderato.Il formato è:
CANCEARC "nomearchivio
Nota: con i comandi visti in questo paragrafo, l’estensione .LOGO non va specificata.
Utilizzo dei comandi Commodore DOS
Questo argomento può essere interessante anche per coloro che non intendono usare il LOGO. Il LOGO consente di inviare all’unità 1541 o equivalente (lettore floppy) dei comandi Commodore DOS. Il comando che consente di effettuare ciò è DOS. La stringa che contiene il comando Commodore DOS deve essere racchiusa fra parentesi quadre:
DOS [stringa]
I nomi degli archivi devono essere seguiti dall’estensione .LOGO.
- Per formattare un disco, si deve utilizzare il comando NEW (abbreviato in N), nel seguente formato:
DOS [N0:DISCO LOGO,01]
DISCO LOGO è l’etichetta che verrà attribuita al disco, 01 è l’ID del disco (costituito da due caratteri, lettere o numeri, a piacere).
- Per eseguire una copia di un archivio sullo stesso disco, si deve usare il comando COPY (abbreviato in C):
DOS [C0:COPIAARCHIVIO.LOGO = 0:ARCHIVIO.LOGO]
COPIARCHIVIO è la copia del file ARCHIVIO.
- Per cambiare il nome di un archivi, occorre usare il comando RENAME (abbreviato in R):
DOS [R0:NUOVO.LOGO = VECCHIO.LOGO]
L’archivio VECCHIO viene rinominato in NUOVO.
- Per cancellare un archivio, in alternativa al comando CANCEARC, si può usare il comando Commodore DOS SCRATCH (abbreviato S):
DOS [S0:DACANCELLARE.LOGO]
Utilizzando questi comandi DOS, è possibile manipolare tutti i tipi di file; quindi, è ad esempio possibile cancellare alcuni file non .LOGO da un disco, per fare posto per gli archivi del LOGO. Abbiamo così scoperto che il LOGO è un comodo DOS wedge per chi non dispone del wedge della Commodore.
Come uscire dal LOGO
Per riportare l’ambiente LOGO allo stato iniziale
Se si vogliono cancellare tutte le variabili e procedure residenti in memoria, riportando il LOGO allo stato iniziale, si deve utilizzare il comando CIAO. Ricomparirà la schermata iniziale del LOGO. Attenzione ad usare questo comando, poiché tutte le procedure non salvate saranno perdute.
Per tornare al CBM BASIC 2.0
Il metodo più intuitivo consiste (ovviamente) nello spegnere e riaccendere il Commodore 64; questa pratica potrebbe col tempo nuocere alla vostra gloriosa macchina. Per evitare problemi, occorre spegnere la macchina, attendere almeno 10 – 15 secondi, poi riaccenderla.
Un metodo più sbrigativo consiste nell’utilizzare il comando .AGGANCIA. Questo è equivalente al comando SYS del CBM BASIC e consente di chiamare una routine in linguaggio macchina presente in memoria. La tabella dei salti del KERNAL (indirizzi relativi dell’insieme di routine del sistema operativo del Commodore 64 disponibili per l’utente) consente, tramite la locazione 64738, di accedere alla routine di "cold start", la quale consente di effettuare il "reset" del computer.
Per farla breve, per uscire dal LOGO e tornare dal BASIC, digitare il comando:
.AGGANCIA 64738 1
Ove 1 è un parametro arbitrario (la routine di "cold start" non ha bisogno di parametri in realtà, ma il comando .AGGANCIA pretende il parametro venga comunque speficato).
Come per il comando CIAO, fare attenzione ad usare questo comando, perché comporta la cancellazione di tutte le procedure e variabili residenti in memoria.
Altri comandi utili per la grafica
SULAPENNA: con questo comando, la tartaruga non lascia né cancella tracce durante il suo movimento. Si abbrevia con SU.
GIULAPENNA: la tartaruga lascia la traccia mentre si muove. Abbreviazione: GIU.
CANCEPENNA: la penna diventa una gomma; la tartaruga, dove passa, cancella con le tracce da essa lasciate.
NASTARTA: nasconde la tartaruga. Abbreviazione: NT.
MOSTARTA: mostra la tartaruga. Abbreviazione: MT.
DUECOLORI: permette l’uso della modalità grafica multicolor.
UNCOLORE: permette l’uso della modalità grafica hi-res.
ASCOL numerocolore: consente di selezionare il colore della penna. Il numero del colore è compreso fra -1 e 15 (il colore -1 equivale al comando cancepenna; vedi manuale Commodore per i codici dei colori da 0 a 15).
COLORESFONDO numerocolore: consente di selezionare il colore dello sfondo dello schermo grafico. Abbreviazione: CF.
COLTESTO numerocolore: consente di selezionare il colore con il quale viene visualizzato il testo.
SFOTESTO numerocolore: consente di cambiare lo sfondo dello schermo modalità testo.
Conclusioni
Abbiamo cercato di fornire, in queste poche pagine, un facile richiamo al LOGO, con particolare riferimento ad alcune peculiarità della versione per Commodore 64.
Abbiamo inizialmente visto il caratteristico ambiente grafico che il linguaggio mette a disposizione, poi ci siamo concentrati sulle istruzioni per la grafica.
E’ stato poi mostrato come editare delle procedure personalizzate e come memorizzarle su disco. Si è inoltre visto come il LOGO possa essere utilizzato per inviare agevolmente comandi Commodore DOS all’unità a disco.
Sono stati infine forniti ulteriori comandi per la grafica. Una trattazione completa del linguaggio LOGO non è nostro obiettivo; tuttavia, gli eventuali interessati potranno senz’altro utilizzare le risorse disponibili in rete per questo linguaggio, anche considerando le informazioni per implementazioni diverse dal Commodore 64. Crediamo che, vista l’importanza pedagogica del linguaggio, siano ancora disponibili dei libri che lo trattano.
Riferimenti
Scarica il file .T64 contenente il LOGO per Commodore 64