если
В своей простейшей форме условный оператор 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)Как это работает
Тестовое выражение:
- Сначала вычисляется выражение
test.
- Сначала вычисляется выражение
Результат на основе теста:
- Если
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оценивает и выполняет последовательность только в том случае, если тест верен. В противном случае он оценивает и выполняет альтернативу.