ถ้า
ในรูปแบบที่ง่ายที่สุด if แบบมีเงื่อนไขใน Scheme จะประเมินการทดสอบและดำเนินการหนึ่งในสองบล็อกโค้ดที่เป็นไปได้ โดยขึ้นอยู่กับผลลัพธ์ แบบฟอร์มที่ง่ายที่สุดมีลักษณะดังนี้:
(if test-is-true
do-this)- หาก
testประเมินเป็นจริง (#t) โค้ดบล็อกในส่วนที่ตามมา จะถูกดำเนินการ บล็อกอาจส่งคืนค่าหรือดำเนินการอื่นๆ เช่น การกำหนดตัวแปรหรือเอาต์พุตการพิมพ์
ตัวอย่าง
(if (< 0 1)
(lumi-message "True!"))- ในกรณีนี้
testคือ(< 0 1)(ตรวจสอบว่า 0 น้อยกว่า 1) - เนื่องจากการทดสอบประเมินเป็นจริง (
#t) บล็อกโค้ด(lumi-message "True!")จะถูกดำเนินการ ซึ่งจะพิมพ์"True!"
การเพิ่มเงื่อนไขอื่น: if-else
เมื่อใช้เงื่อนไข if กับบล็อกโค้ดสำรอง (ตัวพิมพ์ else) โครงสร้างจะมีลักษณะดังนี้:
(if test
do-this
else-do-this)- หาก
testประเมินเป็นจริง (#t) บล็อกโค้ด ผลที่ตามมา จะถูกดำเนินการ - หาก
testประเมินเป็นเท็จ (#f) บล็อกโค้ด ทางเลือก จะถูกดำเนินการ
(if test
consequent
alternative)มันทำงานอย่างไร
ทดสอบนิพจน์:
- นิพจน์
testจะได้รับการประเมินก่อน
- นิพจน์
ผลลัพธ์จากการทดสอบ:
- หาก
testประเมินเป็นจริง (#t) บล็อกโค้ดที่ตามมา จะถูกดำเนินการ - หาก
testประเมินเป็นเท็จ (#f) บล็อกโค้ดทางเลือก จะถูกดำเนินการ
- หาก
ทั้งบล็อกโค้ด consequent และ alternative สามารถดำเนินการ Scheme ที่ถูกต้องได้ รวมถึงการส่งคืนค่า การแก้ไขตัวแปร หรือการรันโพรซีเดอร์
ตัวอย่าง
ตัวอย่างที่ 1: การส่งคืนค่า
(if (< 0 1)
1
0)- ที่นี่
testคือ(< 0 1)(ตรวจสอบว่า 0 น้อยกว่า 1) - เนื่องจากการทดสอบประเมินเป็นจริง (
#t) บล็อก ผลที่ตามมา (1) จะถูกดำเนินการและส่งกลับค่าของบล็อกนั้น
ผลลัพธ์: 1
ตัวอย่างที่ 2: การประเมินบล็อกเริ่มต้น
ในกรณีที่คุณจำเป็นต้องดำเนินการหลายอย่างเมื่อเงื่อนไขเป็นจริงหรือเท็จ คุณสามารถใช้ begin หรือ let เพื่อจัดกลุ่มเข้าด้วยกันได้
(if (= 0 1)
(begin
(lumi-message "This won't run")
1)
(begin
(lumi-message "False condition met, calculating...")
(* 3 4)))- ในตัวอย่างนี้
testคือ(= 0 1)(ตรวจสอบว่า 0 เท่ากับ 1) - เนื่องจากการทดสอบประเมินว่าเป็นเท็จ (
#f) บล็อก ทางเลือก จึงถูกดำเนินการ:- ขั้นแรก พิมพ์
"False condition met, calculating..." - จากนั้นจะคำนวณ
(* 3 4)และส่งคืน12
- ขั้นแรก พิมพ์
ผลลัพธ์: พิมพ์ “ตรงตามเงื่อนไขเท็จ กำลังคำนวณ…” และส่งคืน 12.
ตัวอย่างที่ 3: การประเมินคำสั่งให้
การใช้ let ช่วยให้เราสามารถประกาศตัวแปรขอบเขตภายในภายในบล็อกโค้ดได้
(if (= 1 1)
(let (x -1)
(lumi-message "True condition met, calculating...")
(* x 10))
(let (y 4)
(lumi-message "This won't run")
(* 3 y)))- ในตัวอย่างนี้
testคือ(= 1 1)(ตรวจสอบว่า 1 เท่ากับ 1 หรือไม่) - เนื่องจากการทดสอบประเมินเป็นจริง (
#t) บล็อก ผลที่ตามมา จะถูกดำเนินการ:- ก่อนอื่น ให้พิมพ์
"True condition met, calculating..." - จากนั้นจะคำนวณ
(* -1 10)และส่งคืน-10
- ก่อนอื่น ให้พิมพ์
ผลลัพธ์: พิมพ์ “ตรงตามเงื่อนไขจริง กำลังคำนวณ…” และส่งคืน -10.
สรุป- เงื่อนไข if เป็นเครื่องมือที่ทรงพลังใน Scheme สำหรับการประเมินการทดสอบและดำเนินการบล็อคโค้ดที่เกี่ยวข้อง
- สามารถจัดการทั้งนิพจน์ทั่วไปและบล็อกโค้ดที่ซับซ้อนที่ส่งคืนค่า แก้ไขตัวแปร หรือแสดงผลข้างเคียง
- ข้อควรจำ: หากไม่มีบล็อก
elseที่ชัดเจนifจะประเมินและดำเนินการ ผลที่ตามมา หากการทดสอบเป็นจริงเท่านั้น มิฉะนั้นจะประเมินและดำเนินการ ทางเลือก