If statement 对于';如果';?
以下代码的scheme等价性是什么If statement 对于';如果';?,if-statement,scheme,If Statement,Scheme,以下代码的scheme等价性是什么 if (condition) { function1; function2; } else { function3; function4; } 谢谢。有一些网站介绍了这类内容。以下是链接中的一个示例: (define (min a b) (if (< a b) a b)) (定义(最小a和b) (如果(
if (condition)
{
function1;
function2;
}
else
{
function3;
function4;
}
谢谢。有一些网站介绍了这类内容。以下是链接中的一个示例:
(define (min a b)
(if (< a b)
a
b))
(定义(最小a和b)
(如果(
怎么样
(if condition
then-code
else-code)
方案也具有更一般性
(cond
((test1) case-1)
((test2) case-2)
...
(else else-case))
如果你使用球拍,那么
(when test then-code)
如果没有else,则为。WorBlux:
(如果条件1(开始功能1功能2)(开始功能3
function4))“begin”是一个强制顺序执行的过程/宏
从左到右计算每个参数,并返回
计算的最后一个参数的值。在第二种形式中,各条款
包含在隐式开始中。此外,定义特殊形式也是
所以包装,所以你可以做(条件1函数1函数2)(其他
功能3(功能4))–WorBlux
代码为每个真分支和假分支执行块的并行代码为:
(if (condition)
(begin
(function1)
(function2))
(begin
(function3)
(function4)))
视情况而定。你真的应该用一个实际的问题来进一步缩小你的问题范围,因为答案取决于你想做什么
在惯用的方案中,大多数都应该在没有副作用的情况下进行
(if predicate-expression
consequent-expression
alternative-expression) ;; alternative is optional but should be used anyway.
但是,对于您的代码,分支中有不止一件事情,比如:
int test (condition)
{
if (condition)
{
function1();
return function2();
}
else
{
function3();
return function4();
}
}
在这里,为了让function1
和function3
做任何有用的事情,它必须变异、读或写一些东西,也称为副作用。您应该尽量避免这种情况,因此在Scheme中,您可以使用let
来存储临时变量,在返回时执行调用,如下所示:
(define (test condition)
(if condition
(let ((tmp (function3)))
(function4 tmp))
(function4 (function3))))
现在。您最终将需要一些程序的副作用,然后您需要使用begin
或使用具有显式begin的cond
(if predicate-expression
(begin
consequent-side-effect-expression
consequent-tail-expression)
(begin
alternative-side-effect-expression
alternative-tail-expression))
现在,begin
将多个表达式合并为一个,并且begin块的结果是它的最后一个表达式,因此您甚至可以在谓词中使用它。Cond在每个结果中都有一个明确的开始,因此当我需要多个结果或开始时,我经常从if
切换到Cond
:
(cond (predicate-expression consequent-side-effect-expression
consequent-tail-expression)
(predicate2-expression consequent2-tail-expression2)
(else alternative-side-effect-expression
alternative-tail-expression))
通常,当有副作用时,你并不总是需要替代品。实际上,您对if
返回的内容不感兴趣,因为它可能也不在尾部位置。在这些情况下,您在(rnrs控件(6))
库中有时
和,除非有明确的开始:
(when expression
consequent-side-effect-expression
...
consequent-tail-expression)
(unless expression
consequent-side-effect-expression
...
consequent-tail-expression)
(let ()
(display "hello") ; displays "hello"
5) ; returns 5
(define (test x)
(display x) ; display x
(+ x 5)) ; return x+5
let
或过程也有明确的开始:
(when expression
consequent-side-effect-expression
...
consequent-tail-expression)
(unless expression
consequent-side-effect-expression
...
consequent-tail-expression)
(let ()
(display "hello") ; displays "hello"
5) ; returns 5
(define (test x)
(display x) ; display x
(+ x 5)) ; return x+5
到目前为止,这是唯一一个解决then和else部分中多个表达式问题的答案。这个问题似乎离题了,因为它是关于一个基本的编程控制构造(if/then/else)。这是非常基本的知识,有大量的资源。请随意阅读SICP,它将回答您的大部分问题。可能的副本