ทำ
ฟังก์ชัน do ใน Scheme เป็นกลไกการวนซ้ำที่ช่วยให้สามารถวนซ้ำด้วยเงื่อนไขการเริ่มต้น การอัปเดต และการยกเลิก มีประโยชน์อย่างยิ่งเมื่อคุณจำเป็นต้องดำเนินการตามลำดับของการดำเนินการตามจำนวนครั้งที่กำหนดหรือจนกว่าจะตรงตามเงื่อนไข
รูปแบบทั่วไปของ do คือ:
(do ((var1 init1 update1)
(var2 init2 update2)
(var3 init3 update3))
(termination-condition result)
body)- ตัวแปร: ตัวแปรลูป
- ค่าเริ่มต้น: ค่าเริ่มต้นของตัวแปรลูปแต่ละตัว
- Update-expression: นิพจน์เพื่ออัปเดตตัวแปรลูปเมื่อสิ้นสุดการวนซ้ำแต่ละครั้ง
- Termination-condition: เงื่อนไขในการหยุดการวนซ้ำ
- Result-expression: ค่าที่จะส่งคืนเมื่อการวนซ้ำสิ้นสุดลง
- เนื้อหา: โค้ดที่จะดำเนินการในการวนซ้ำแต่ละครั้ง
ตัวอย่าง: รวมตัวเลขตั้งแต่ 1 ถึง 5
(do ((i 1 (+ i 1)) ; Initialize i to 1, increment by 1
(sum 0 (+ sum i))) ; Initialize sum to 0, add i to sum
((> i 5) sum) ; Terminate when i > 5, return sum
(lumi-message (number->string sum))) ; Print sum at each step- ตัวแปรลูป
iเริ่มต้นที่ 1 และเพิ่มขึ้นทีละ 1 ในแต่ละการวนซ้ำ - ตัวแปร
sumจะสะสมผลรวมของi - การวนซ้ำจะสิ้นสุดลงเมื่อ
i > 5ส่งคืนค่าสุดท้ายของsum
เอาต์พุต: 15
มันทำงานอย่างไร
การเริ่มต้น:
- ตัวแปรลูปแต่ละตัวถูกกำหนดค่าเริ่มต้น
การตรวจสอบการสิ้นสุด:
- เมื่อเริ่มต้นการวนซ้ำแต่ละครั้ง จะมีการตรวจสอบเงื่อนไขการสิ้นสุด หากเป็นจริง การวนซ้ำจะหยุดและนิพจน์ผลลัพธ์จะถูกประเมิน
การทำซ้ำ:
- หากเงื่อนไขการสิ้นสุดเป็นเท็จ เนื้อความจะถูกดำเนินการ และตัวแปรลูปจะถูกอัพเดตโดยใช้นิพจน์การอัพเดตตามลำดับ
สรุป
- โครงสร้าง
doมอบวิธีที่ยืดหยุ่นในการใช้งานลูปที่มีตัวแปรหลายตัวและเงื่อนไขการยกเลิกที่ซับซ้อน - มีประโยชน์สำหรับงานที่ต้องการการอัปเดตสถานะในการวนซ้ำ
- เงื่อนไขการสิ้นสุดจะกำหนดเมื่อลูปสิ้นสุดและสามารถส่งคืนผลลัพธ์สุดท้ายได้
เมื่อใช้ do คุณจะสามารถนำอัลกอริธึมแบบวนซ้ำใน Scheme ไปใช้ได้ด้วยการควบคุมการเริ่มต้น การอัปเดต และการยุติที่แม่นยำ ซึ่งทำให้ do เป็นการผสมผสานระหว่าง กลไกการเชื่อมโยงที่กำหนดขอบเขต (เช่น let) และ โครงสร้างการควบคุมแบบวนซ้ำ ทำให้สามารถจัดการกับการวนซ้ำและสถานะชั่วคราวในลักษณะที่กระชับและชัดเจน