REPL:นี่เป็นโพรซีเดอร์ที่เพิ่งวนรอบยอมรับคำสั่งทีละครั้งเรียกใช้งานและพิมพ์ผลลัพธ์
สามขั้นตอนในการวนซ้ำแต่ละครั้งของลูปคือ:
- การเรียกอ่านเพื่ออ่านอักขระที่ประกอบขึ้นเป็นนิพจน์ทางข้อความจากบัฟเฟอร์อินพุตคีย์บอร์ดและสร้างโครงสร้างข้อมูลเพื่อแทนค่า
- การเรียกใช้ eval เพื่อประเมินค่านิพจน์ - อย่างสังหรณ์ใจ eval "หาว่านิพจน์หมายถึงอะไร" และ "ทำสิ่งที่มันบอกให้ทำ" คืนค่าของนิพจน์ - และ
- การเรียกเขียนเพื่อพิมพ์การแสดงข้อความต้นฉบับของผลลัพธ์จาก eval เพื่อให้ผู้ใช้สามารถเห็นได้
คุณสามารถเขียนวนรอบ read-eval-print ของคุณเองสำหรับโปรแกรมของคุณเพื่อให้ผู้ใช้สามารถพิมพ์ในนิพจน์และคุณสามารถตีความพวกเขาในแบบที่คุณต้องการ คุณสามารถเริ่มลูป read-eval-print (โดยการพิมพ์ (rep-loop)) และมันจะเข้ามาแทนที่จากลูป read-eval-loop แบบแผนโครงการปกติแปลความหมายของนิพจน์ในแบบของคุณ
นี่คือลูป 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
ขอให้สังเกตว่านิพจน์ (เขียน (eval (อ่าน))) ทำสิ่งต่าง ๆ ในลำดับการอ่าน - Eval-print ที่เหมาะสมเนื่องจากอาร์กิวเมนต์ของการเรียกแต่ละโพรซีเดอร์ถูกคำนวณก่อนการโทรจริง
Interactive Shell: เชลล์แบบโต้ตอบอ่านคำสั่งจากอินพุตของผู้ใช้บนเทอร์มินัล เหนือสิ่งอื่นใดเช่นเชลล์อ่านไฟล์เริ่มต้นเมื่อเปิดใช้งานแสดงพรอมต์และเปิดใช้งานการควบคุมงานโดยค่าเริ่มต้น ผู้ใช้สามารถโต้ตอบกับเชลล์นั่นคือวิธีที่ชื่อเชลล์แบบโต้ตอบเกิดขึ้น ให้เราพิจารณาสคริปต์ทุบตีนี้:
#!/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 ซึ่งเป็นล่ามหลามที่คนส่วนใหญ่ใช้เพื่อเรียนรู้หลามเป็นหนึ่งในการโต้ตอบที่มันสื่อสารกับผู้ใช้ของมัน