REPL: questa è una procedura che esegue semplicemente il loop, accetta un comando alla volta, eseguendolo e stampando il risultato.
I tre passaggi di ciascuna iterazione del loop sono:
- Chiamando read per leggere i caratteri che compongono un'espressione testuale dal buffer di input della tastiera e costruire una struttura di dati per rappresentarla,
- Chiamare eval per valutare l'espressione - intuitivamente, eval "capisce cosa significa l'espressione" e "fa ciò che dice di fare", restituendo il valore dell'espressione - e
- Chiamando write per stampare una rappresentazione testuale del risultante da eval, in modo che l'utente possa vederlo.
Puoi scrivere il tuo ciclo read-eval-print per i tuoi programmi, in modo che gli utenti possano digitare espressioni e interpretarle come preferisci. Puoi avviare il tuo ciclo read-eval-print (digitando (rep-loop)), e prenderà il posto del normale ciclo read-eval-print dello Schema, interpretando le espressioni a modo tuo.
Ecco un semplice ciclo read-eval-print:
(define (rep-loop)
(display "repl>") ; print a prompt
(write (eval (read))) ; read expr., pass to eval, write result
(rep-loop)) ; loop (tail-recursive call) to do it again
Si noti che l'espressione (write (eval (read))) fa le cose nel giusto ordine read-eval-print, perché l'argomento di ciascuna chiamata di procedura viene calcolato prima della chiamata effettiva.
Shell interattiva: una shell interattiva legge i comandi dall'input dell'utente su un terminale. Tra le altre cose, tale shell legge i file di avvio all'attivazione, visualizza un prompt e abilita il controllo dei processi per impostazione predefinita. L'utente può interagire con la shell. Ecco come è nato il nome della shell interattiva. Consideriamo questo script bash:
#!/bin/bash
echo -n "Enter the value of variable 'var1': "
read var1
echo "var1 = $var1"
echo
echo -n "Enter the values of variables 'var2' and 'var3' "
echo =n "(separated by a space or tab): "
read var2 var3
echo "var2 = $var2 var3 = $var3"
# If you input only one value,
#+ the other variable(s) will remain unset (null).
exit 0
Ora lo script sopra interagisce con l'utente, chiede all'utente di inserire input in base ai quali esegue i suoi calcoli. Ecco perché si comporta come una shell interattiva.
Allo stesso modo, l'interprete di Python che la maggior parte delle persone usa per imparare Python è interattivo mentre comunica con l'utente.