我在计划程序中执行多个有一个非常简单的要求 多于一个的语句,在的“如果”在条件。 。所以,我写我的 码,是这样的:

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

显然,上述不工作,因为我有无意中 创建了#参数的#程序。所以,让我 工作完成后,我简单地把上面的表达式中一个新的功能, 从那里调用它,来代替表达式,表达式2。它 的工作原理。

所以,我的观点在这里:是否有任何其他的条件结构,它 可以在这里支持我的要求是什么?

有帮助吗?

解决方案

在MIT-方案,这是不很不同,则可以使用begin

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

或者使用电导率:

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

其他提示

(begin ...)是你如何评估多个表达式并返回最后一个。许多其他结构作为“隐性” begin块(它们允许多个表达式就像一个begin块,但你不必说begin),喜欢的cond条款的身体,对功能的define的身体,身体的一个lambda,一个let体等;你可能一直在使用它没有意识到这一点。但对于if,因为有两个表达式(一个为真,一个假)彼此相邻,因此允许多个表情将使暧昧是不是在语法可能。所以,你必须使用一个明确的begin结构。

您可以使用(开始...),让你在你的if语句的真正分支想要什么。请参见这里

您可以使用COND,或将表达成Lisp的类似progn这个。(我不知道它是如何调用PLT的计划的编辑:它叫BEGIN 的)

COND看起来像这样在方案:

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

使用一个if语句具有多于2箱子涉及嵌套,e.g:

(if (test-1)               ; "if"
    (expression-1)
    (if (test-2)           ; "else-if"
        (expression-2)
        (expression-3)))  ; "else"

使用cond似乎是用于表达的条件语句,因为它更容易比一堆嵌套ifs的读取和也可以执行多个语句,而不必使用begin子句的首选方式:

(cond ((test-1)
       (expression-1))
      ((test-2) 
       (expression-2)
       (expression-3))
      (else 
       (default-expression)))
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top