if

У найпростішій формі умовний оператор if у Scheme оцінює тест і на основі результату виконує один із двох можливих блоків коду. Найпростіша форма виглядає так:

(if test-is-true
  do-this)
  • Якщо test істинний (#t), виконується блок коду в гілці consequent. Блок може повертати значення або виконувати інші дії — наприклад присвоєння змінної або вивід.

Приклад

(if (< 0 1)
  (lumi-message "True!"))
  • Тут test(< 0 1) (перевірка, чи 0 менше 1).
  • Оскільки тест істинний (#t), виконується (lumi-message "True!"), який виводить "True!".

Додавання гілки else: if-else

Коли if має альтернативний блок коду (гілку else), структура така:

(if test
  do-this
  else-do-this)
  • Якщо test істинний (#t), виконується блок consequent.
  • Якщо test хибний (#f), виконується блок alternative.
(if test
  consequent
  alternative)

Як це працює

  1. Тестовий вираз:

    • Спочатку обчислюється вираз test.
  2. Результат за тестом:

    • Якщо test істинний (#t), виконується блок consequent.
    • Якщо test хибний (#f), виконується блок alternative.

Обидва блоки можуть виконувати будь-яку дійсну операцію Scheme — повертати значення, змінювати змінні або запускати процедури.

Приклади

Приклад 1: повернення значення

(if (< 0 1)
  1
  0)
  • Тест (< 0 1) істинний, тому виконується блок 1 і повертається 1.

Приклад 2: блок begin

Коли потрібно виконати кілька дій, використовуйте begin або let:

(if (= 0 1)
  (begin
    (lumi-message "This won't run")
    1)
  (begin
    (lumi-message "False condition met, calculating...")
    (* 3 4)))
  • Тест (= 0 1) хибний, тому виконується alternative:
    • спочатку виводиться "False condition met, calculating...";
    • потім обчислюється (* 3 4) і повертається 12.

Результат: виводить “False condition met, calculating…” і повертає 12.

Приклад 3: вираз let

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)))
  • Тест (= 1 1) істинний, тому виконується consequent:
    • виводиться "True condition met, calculating...";
    • обчислюється (* -1 10) і повертається -10.

Результат: виводить “True condition met, calculating…” і повертає -10.

Підсумок

  • if — потужний інструмент Scheme для оцінки тестів і виконання відповідних блоків коду.
  • Він працює як з простими виразами, так і зі складними блоками, що повертають значення, змінюють змінні або мають побічні ефекти.
  • Якщо явної гілки else немає, if виконує consequent лише коли тест істинний; інакше виконується alternative.