REPL: это процедура, которая просто зацикливается, принимает по одной команде за раз, выполняет ее и печатает результат.
Три шага на каждой итерации цикла:
- Вызов read для чтения символов, составляющих текстовое выражение, из буфера ввода с клавиатуры и построения структуры данных для ее представления.
- Вызов eval для оценки выражения - интуитивно, eval «выясняет, что означает выражение» и «делает то, что говорит», возвращая значение выражения - и
- Вызов write для печати текстового представления результата eval, чтобы пользователь мог его увидеть.
Вы можете написать свой собственный цикл read-eval-print для своих собственных программ, чтобы пользователи могли вводить выражения, и вы могли интерпретировать их любым удобным для вас способом. Вы можете запустить свой цикл read-eval-print (введя (rep-loop)), и он заменит обычный цикл Scheme read-eval-print, интерпретируя выражения по-своему.
Вот очень простой цикл 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
Обратите внимание, что выражение (write (eval (read))) выполняет действия в правильном порядке read-eval-print, поскольку аргумент для каждого вызова процедуры вычисляется до фактического вызова.
Интерактивная оболочка: интерактивная оболочка считывает команды из пользовательского ввода на терминале. Среди прочего, такая оболочка читает файлы запуска при активации, отображает приглашение и по умолчанию включает управление заданиями. Пользователь может взаимодействовать с оболочкой. Так появилось имя интерактивной оболочки. Давайте рассмотрим этот скрипт 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
Теперь вышеприведенный скрипт взаимодействует с пользователем, он просит пользователя ввести входные данные, на основании которых он выполняет свои вычисления. Вот почему он ведет себя как интерактивная оболочка.
Similary, интерпретатор python, который большинство людей использует для изучения python, является интерактивным, поскольку он общается со своим пользователем.