LOGO/Input ed Output

Logo fornisce alcune semplici primitive per l'input e l'output.

Per 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

Le 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

In 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