ถ้า

ในรูปแบบที่ง่ายที่สุด 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)

มันทำงานอย่างไร

  1. ทดสอบนิพจน์:

    • นิพจน์ test จะได้รับการประเมินก่อน
  2. ผลลัพธ์จากการทดสอบ:

    • หาก 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 จะประเมินและดำเนินการ ผลที่ตามมา หากการทดสอบเป็นจริงเท่านั้น มิฉะนั้นจะประเมินและดำเนินการ ทางเลือก