REPL: Este é um procedimento que apenas executa um loop, aceita um comando de cada vez, executa-o e imprime o resultado.
As três etapas em cada iteração do loop são:
- Chamando read para ler os caracteres que compõem uma expressão textual do buffer de entrada do teclado e construir uma estrutura de dados para representá-la,
- Chamar eval para avaliar a expressão - intuitivamente, eval "descobre o que a expressão significa" e "faz o que diz para fazer", retornando o valor da expressão - e
- Chamar write para imprimir uma representação textual do resultado da avaliação, para que o usuário possa vê-la.
Você pode escrever seu próprio loop de leitura-avaliação-impressão para seus próprios programas, para que os usuários possam digitar expressões e interpretá-las da maneira que desejar. Você pode iniciar o loop read-eval-print (digitando (rep-loop)) e ele substituirá o loop normal do esquema read-eval-print, interpretando as expressões do seu jeito.
Aqui está um loop muito simples de leitura e avaliação:
(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 a expressão (write (eval (read))) faz as coisas na ordem apropriada de leitura, avaliação e impressão, porque o argumento para cada chamada de procedimento é calculado antes da chamada real.
Shell Interativo: Um shell interativo lê comandos da entrada do usuário em um terminal. Entre outras coisas, esse shell lê os arquivos de inicialização na ativação, exibe um prompt e ativa o controle do trabalho por padrão. O usuário pode interagir com o shell. Foi assim que o nome do shell interativo surgiu. Vamos considerar 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
Agora, o script acima interage com o usuário, solicita que ele insira entradas com base nas quais faz seus cálculos. É por isso que se comporta como um shell interativo.
Similary, o intérprete python que a maioria das pessoas usa para aprender python é interativo, pois se comunica com seu usuário.