если

В своей простейшей форме условный оператор if в Scheme оценивает тест и на основе результата выполняет один из двух возможных блоков кода. Самая простая форма выглядит так:

(if test-is-true
  do-this)
  • Если test имеет значение true (#t), блок кода в последовательности выполняется. Блок может возвращать значение или выполнять другие действия, например присваивать переменную или распечатывать выходные данные.

Пример

(if (< 0 1)
  (lumi-message "True!"))
  • В данном случае test — это (< 0 1) (проверяется, меньше ли 0 1).
  • Поскольку результат теста равен true (#t), выполняется блок кода (lumi-message "True!"), который печатает "True!".

Добавление еще одного условия: if-else

При использовании условного оператора if с альтернативным блоком кода (случай else) структура выглядит следующим образом:

(if test
  do-this
  else-do-this)
  • Если test имеет значение true (#t), выполняется последующий блок кода.
  • Если значение test равно false (#f), выполняется альтернативный блок кода.
(if test
  consequent
  alternative)

Как это работает

  1. Тестовое выражение:

    • Сначала вычисляется выражение test.
  2. Результат на основе теста:

    • Если test имеет значение true (#t), последующий блок кода выполняется.
    • Если значение test равно false (#f), выполняется альтернативный блок кода.

Оба блока кода consequent и alternative могут выполнять любую допустимую операцию Scheme, включая возврат значений, изменение переменных или запуск процедур.

Примеры

Пример 1: Возврат значения

(if (< 0 1)
  1
  0)
  • Здесь test — это (< 0 1) (проверяется, меньше ли 0 1).
  • Поскольку результат теста равен true (#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

Использование 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).
  • Поскольку результат теста равен true (#t), выполняется последующий блок:
    • Сначала он печатает "True condition met, calculating...".
    • Затем он вычисляет (* -1 10) и возвращает -10.

Результат: Печатает «Истинное условие выполнено, расчет…» и возвращает -10.

Резюме- Условие if — это мощный инструмент в Scheme для оценки тестов и выполнения соответствующих блоков кода.

  • Он может обрабатывать как простые выражения, так и сложные блоки кода, которые возвращают значения, изменяют переменные или выполняют побочные эффекты.
  • Помните: если нет явного блока else, if оценивает и выполняет последовательность только в том случае, если тест верен. В противном случае он оценивает и выполняет альтернативу.