REPL: este es un procedimiento que simplemente repite, acepta un comando a la vez, lo ejecuta e imprime el resultado.
Los tres pasos en cada iteración del bucle son:
- Llamando a read para leer los caracteres que forman una expresión textual desde el búfer de entrada del teclado, y construir una estructura de datos para representarlo,
- Al llamar a eval para evaluar la expresión, intuitivamente, eval "descubre lo que significa la expresión" y "hace lo que dice hacer", devolviendo el valor de la expresión, y
- Llamando a escribir para imprimir una representación textual del resultado de eval, para que el usuario pueda verlo.
Puede escribir su propio bucle read-eval-print para sus propios programas, de modo que los usuarios puedan escribir expresiones y pueda interpretarlas de la forma que desee. Puede iniciar su ciclo de lectura-evaluación-impresión (escribiendo (rep-loop)), y se hará cargo del ciclo normal de lectura-evaluación-impresión del esquema, interpretando las expresiones a su manera.
Aquí hay un bucle muy simple de lectura-evaluación-impresión:
(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
Observe que la expresión (write (eval (read))) hace las cosas en el orden correcto de lectura-evaluación-impresión, porque el argumento de cada llamada al procedimiento se calcula antes de la llamada real.
Shell interactivo: un shell interactivo lee comandos de la entrada del usuario en un terminal. Entre otras cosas, dicho shell lee los archivos de inicio en la activación, muestra un mensaje y permite el control del trabajo de forma predeterminada. El usuario puede interactuar con el shell. Así es como surgió el nombre del shell interactivo. Consideremos este 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
Ahora el script anterior interactúa con el usuario, le pide al usuario que ingrese entradas en función de las cuales realiza sus cálculos. Por eso se comporta como un shell interactivo.
De manera similar, el intérprete de Python que la mayoría de la gente usa para aprender Python es interactivo ya que se comunica con su usuario.