Ответ 1
В MIT-Scheme, который не очень отличается, вы можете использовать begin
:
(if (= 1 1)
(begin expression1 expression2)
expression3)
Или используйте Cond:
(cond ((= 1 1) expression1 expression2)
(else expression3))
У меня было довольно простое требование в моей программе Scheme для выполнения большего чем одно утверждение, в истинном состоянии "если"., Поэтому я пишу код, что-то вроде этого:
(if (= 1 1)
((expression1) (expression2)) ; these 2 expressions are to be
; executed when the condition is true
(expression3))
Очевидно, что это не работает, поскольку я непреднамеренно создал # процедуру С# аргументами. Итак, чтобы получить мои я просто поставил вышеприведенные выражения в новую функцию и назовите его оттуда вместо выражения expression1, expression2. Это работы.
Итак, я хочу сказать следующее: существует ли какая-либо другая условная конструкция, которая может поддержать мое требование здесь?
В MIT-Scheme, который не очень отличается, вы можете использовать begin
:
(if (= 1 1)
(begin expression1 expression2)
expression3)
Или используйте Cond:
(cond ((= 1 1) expression1 expression2)
(else expression3))
(begin ...)
- это то, как вы оцениваете несколько выражений и возвращаете последний. Многие другие конструкции действуют как "неявные" begin
блоки (они допускают несколько выражений, как и блок begin
, но вам не нужно говорить begin
), как тело предложения cond
, тело a define
для функций, тело a lambda
, тело a let
и т.д.; вы, возможно, использовали его, не осознавая этого. Но для if
это невозможно в синтаксисе, потому что рядом друг с другом есть два выражения (одно для true и одно для false), и поэтому использование нескольких выражений сделает его неоднозначным. Поэтому вам нужно использовать явную конструкцию begin
.
Вы можете использовать COND или поместить выражения в нечто вроде PROGN в Lisp (я не уверен, как он вызывается в PLT Scheme. edit: он называется BEGIN).
COND выглядит так на схеме:
(cond [(= 1 1)
(expression1)
(expression2)]
[else
(expression3)])
вы можете использовать (begin...), чтобы получить то, что вы хотите, в истинном ветки вашего оператора if. См. здесь
Использование оператора if
с более чем двумя случаями включает вложение, например:
(if (test-1) ; "if"
(expression-1)
(if (test-2) ; "else-if"
(expression-2)
(expression-3))) ; "else"
Использование cond
представляется предпочтительным способом выражения условных операторов, поскольку его легче читать, чем пучок вложенных if
, и вы также можете выполнять несколько операторов без использования предложения begin
:
(cond ((test-1)
(expression-1))
((test-2)
(expression-2)
(expression-3))
(else
(default-expression)))