If statement 对于';如果';?

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) (如果(

以下代码的scheme等价性是什么

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,它将回答您的大部分问题。可能的副本