LOGO/Input ed Output

Wikibooks, manuali e libri di testo liberi.

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

Output[modifica]

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

Input[modifica]

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

Esempi[modifica]

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