我的Scheme程序中有一个非常简单的要求,就是在'if‘的真实情况下执行多个语句。。所以我写了我的代码,就像这样:
(if (= 1 1)
((expression1) (expression2)) ; these 2 expressions are to be
; executed when the condition is true
(expression3))显然,由于我无意中创建了一个带有#参数的#过程,所以上述操作不起作用。因此,为了完成我的工作,我只需将上面的表达式放入一个新函数中,然后从那里调用它,而不是expression1,expression2。它起作用了。
所以,我在这里的观点是:这里还有其他条件结构可以支持我的需求吗?
发布于 2009-07-17 15:48:43
在麻省理工学院-方案,这并不是非常不同,您可以使用begin。
(if (= 1 1)
(begin expression1 expression2)
expression3)或使用Cond:
(cond ((= 1 1) expression1 expression2)
(else expression3))发布于 2009-07-17 18:22:34
(begin ...)是计算多个表达式并返回最后一个表达式的方法。许多其他构造充当“隐式”begin块(它们允许多个表达式,就像begin块,但不需要说begin),比如cond子句的主体、函数的define主体、lambda的主体、let的主体等等;您可能在使用它时没有意识到它。但是对于if,这在语法中是不可能的,因为有两个表达式(一个用于true,另一个用于false),因此允许多个表达式会使它变得模糊。因此,您必须使用显式的begin结构。
发布于 2009-07-17 15:48:04
您可以使用COND,也可以将表达式放入Lisp中的PROGN (我不确定PLT如何调用它)。编辑:它被称为开始)。
COND在“计划”中如下所示:
(cond [(= 1 1)
(expression1)
(expression2)]
[else
(expression3)])https://stackoverflow.com/questions/1144106
复制相似问题