LOGO/Input ed Output
Logo fornisce alcune semplici primitive per l'input e l'output.
Output
modificaPer l'output le principali primitive sono: print, type, show.
print visualizza sullo schermo l'oggetto passato come argomento e pone a capo il cursore.
type fa lo stesso ma mantiene il cursore sulla stessa linea.
show si comporta come print ma se l'oggetto passato come argomento è una lista visualizza anche le parentesi quadre all'inizio e alla fine.
? print "pippo pippo ? print [ciao gente] ciao gente ? show [ciao gente] [ciao gente] ? print "pippo print "pluto pippo pluto ? type "pippo print "pluto pippopluto
Ognuna di queste primitive può ricevere più argomenti, ma in questo caso tutto il comando deve essere racchiuso tra parentesi tonde.
? (print "pippo "pluto) pippo pluto ? (show "pippo [pluto paperino]) pippo [pluto paperino] ? (print "pippo [pluto paperino]) pippo pluto paperino
Input
modificaLe principali primitive per l'input dei dati sono: readchar, readword, readlist.
readchar è una funzione che attende un carattere e lo dà come risultato.
readword è una funzione che dà come risultato una stringa.
readlist è una funzione che dà come risultato una lista che contiene gli oggetti letti.
? print readchar 7 ? print readword casa casa ? show readlist et telefono casa [et telefono casa] ? show readword et telefono casa et telefono casa ? print bf readword et telefono casa t telefono casa ? print bf readlist et telefono casa telefono casa
Esempi
modificaIn generale, quando un programma deve richiedere un dato, deve anche mostrare un messaggio che guidi l'utente. Possiamo scrivere delle funzioni che prima di leggere un dato scrivano un messaggio:
to inchar :messaggio type :messaggio type "\ output readchar end
to inword :messaggio type :messaggio type "\ output readword end
to inlist :messaggio type :messaggio type "\ output readlist end
Queste funzioni si possono usare in questo modo:
show inchar [premi un tasto:] show inword [scrivi una parola:] show inlist [scrivi una frase:]
Quando si scrive un programma per risolvere qualche semplice problema conviene avere una funzione che contiene la logica della soluzione, che implementa la formula risolutiva, e una procedura che gestisce l'interfaccia con l'utente.
Ad esempio per trovare l'area di un triangolo conoscendo i lati possiamo usare la formula di Erone (I-II secolo d.C.). Conviene quindi costruire una funzione che riceva come argomenti i lati e restituisca come risultato l'area:
to erone :a :b :c if (or :a>:b+:c :b>:a+:c :c>:a+:b) [op [Non è un triangolo]] make "p (:a+:b+:c)/2 output sqrt (:p*(:p-:a)*(:p-:b)*(:p-:c)) end
Qualche test della funzione assicura che non ci siano errori grossolani:
? print erone 3 4 5 6 ? print erone 3 4 7 0 ? print erone 3 4 8 Non è un triangolo
Ora che abbiamo un nocciolo collaudato, è possibile costruire l'interfaccia:
to area_erone print [Calcolo l'area di un triangolo conoscendo i lati] print [Formula di Erone] print " make "lato1 inword [primo lato:] make "lato2 inword [secondo lato:] make "lato3 inword [terzo lato:] (print [l'area è] erone :lato1 :lato2 :lato3) end
e, infine, provarla:
?area_erone Calcolo l'area di un triangolo conoscendo i lati Formula di Erone
primo lato: 325 secondo lato: 547 terzo lato: 546 l'area è 84789.1026960423