REPL: Bu, sadece bir seferde sadece bir komutu kabul eden, çalıştıran ve sonucu basan bir prosedürdür.
Döngünün her yinelemesindeki üç adım:
- Klavye giriş arabelleğinden bir metin ifadesi oluşturan karakterleri okumak ve onu temsil etmek için bir veri yapısı oluşturmak için okuma çağırmak,
- İfadeyi değerlendirmeye eval denir - sezgisel olarak, eval "ifadenin ne anlama geldiğini bulur" ve "ne yaparsa yapar" ifadesinin değerini döndürür -
- Değerlendirmeden elde edilen sonucun yazılı bir sunumunu yapmak için yazma çağrısı yaparak kullanıcının görebilmesi.
Kendi okuma-değerlendirme-baskı döngüsünü kendi programlarınız için yazabilirsiniz, böylece kullanıcılar ifadeler yazabilir ve istediğiniz şekilde yorumlayabilirsiniz. Okuma-değerlendirme-baskı döngüsünü başlatabilirsiniz (yazarak (rep-loop)) ve normal Scheme okuma-değerlendirme-baskı döngüsünden devralacak ve ifadeleri istediğiniz gibi yorumlayacaksınız.
İşte çok basit bir okuma-değerlendirme-baskı döngüsü:
(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
Her yazma işleminin argümanı gerçek çağrıdan önce hesaplandığından, (write (eval (read))) ifadesinin doğru okuma-değerlendirme-baskı sırasına göre yapıldığına dikkat edin.
Etkileşimli Kabuk: Etkileşimli bir kabuk, terminaldeki kullanıcı girişinden komutları okur. Diğer şeylerin yanı sıra, böyle bir kabuk aktivasyonda başlangıç dosyalarını okur, bir bilgi istemi görüntüler ve varsayılan olarak iş kontrolünü sağlar. Kullanıcı kabukla etkileşime girebilir. Etkileşimli kabuk adının nasıl oluştuğu budur. Bu bash betiğini düşünelim:
#!/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
Şimdi yukarıdaki komut dosyası kullanıcıyla etkileşime giriyor, kullanıcıdan hesaplamalarını yaptığı girişleri girmesini istiyor. Bu yüzden etkileşimli bir kabuk gibi davranıyor.
Benzer şekilde, çoğu insanın python'u öğrenmek için kullandığı python yorumlayıcısı, kullanıcısı ile iletişim kurduğu için etkileşimlidir.