Подтвердить что ты не робот

О "If.." в Схеме (plt-схема)

У меня было довольно простое требование в моей программе Scheme для выполнения большего чем одно утверждение, в истинном состоянии "если"., Поэтому я пишу код, что-то вроде этого:

(if (= 1 1)
 ((expression1) (expression2))  ; these 2 expressions are to be
                                ; executed when the condition is true
  (expression3))

Очевидно, что это не работает, поскольку я непреднамеренно создал # процедуру С# аргументами. Итак, чтобы получить мои я просто поставил вышеприведенные выражения в новую функцию и назовите его оттуда вместо выражения expression1, expression2. Это работы.

Итак, я хочу сказать следующее: существует ли какая-либо другая условная конструкция, которая может поддержать мое требование здесь?

4b9b3361

Ответ 1

В MIT-Scheme, который не очень отличается, вы можете использовать begin:

(if (= 1 1)
    (begin expression1 expression2)
    expression3)

Или используйте Cond:

(cond ((= 1 1) expression1 expression2)
      (else expression3))

Ответ 2

(begin ...) - это то, как вы оцениваете несколько выражений и возвращаете последний. Многие другие конструкции действуют как "неявные" begin блоки (они допускают несколько выражений, как и блок begin, но вам не нужно говорить begin), как тело предложения cond, тело a define для функций, тело a lambda, тело a let и т.д.; вы, возможно, использовали его, не осознавая этого. Но для if это невозможно в синтаксисе, потому что рядом друг с другом есть два выражения (одно для true и одно для false), и поэтому использование нескольких выражений сделает его неоднозначным. Поэтому вам нужно использовать явную конструкцию begin.

Ответ 3

Вы можете использовать COND или поместить выражения в нечто вроде PROGN в Lisp (я не уверен, как он вызывается в PLT Scheme. edit: он называется BEGIN).

COND выглядит так на схеме:

(cond [(= 1 1)
       (expression1)
       (expression2)]
      [else
       (expression3)])

Ответ 4

вы можете использовать (begin...), чтобы получить то, что вы хотите, в истинном ветки вашего оператора if. См. здесь

Ответ 5

Использование оператора 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)))