首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于“如果..”计划(plt-计划)

关于“如果..”计划(plt-计划)
EN

Stack Overflow用户
提问于 2009-07-17 15:44:29
回答 5查看 12.1K关注 0票数 16

我的Scheme程序中有一个非常简单的要求,就是在'if‘的真实情况下执行多个语句。。所以我写了我的代码,就像这样:

代码语言:javascript
复制
(if (= 1 1)
 ((expression1) (expression2))  ; these 2 expressions are to be
                                ; executed when the condition is true
  (expression3))

显然,由于我无意中创建了一个带有#参数的#过程,所以上述操作不起作用。因此,为了完成我的工作,我只需将上面的表达式放入一个新函数中,然后从那里调用它,而不是expression1,expression2。它起作用了。

所以,我在这里的观点是:这里还有其他条件结构可以支持我的需求吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-07-17 15:48:43

在麻省理工学院-方案,这并不是非常不同,您可以使用begin

代码语言:javascript
复制
(if (= 1 1)
    (begin expression1 expression2)
    expression3)

或使用Cond:

代码语言:javascript
复制
(cond ((= 1 1) expression1 expression2)
      (else expression3))
票数 23
EN

Stack Overflow用户

发布于 2009-07-17 18:22:34

(begin ...)是计算多个表达式并返回最后一个表达式的方法。许多其他构造充当“隐式”begin块(它们允许多个表达式,就像begin块,但不需要说begin),比如cond子句的主体、函数的define主体、lambda的主体、let的主体等等;您可能在使用它时没有意识到它。但是对于if,这在语法中是不可能的,因为有两个表达式(一个用于true,另一个用于false),因此允许多个表达式会使它变得模糊。因此,您必须使用显式的begin结构。

票数 2
EN

Stack Overflow用户

发布于 2009-07-17 15:48:04

您可以使用COND,也可以将表达式放入Lisp中的PROGN (我不确定PLT如何调用它)。编辑:它被称为开始)。

COND在“计划”中如下所示:

代码语言:javascript
复制
(cond [(= 1 1)
       (expression1)
       (expression2)]
      [else
       (expression3)])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1144106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档