if 语句 - SICP Lisp 'if'条件表达式解释



我正在通过 SICP 工作,并且已经了解了有关平方根代码的部分。我知道"如果"语句后面只能跟着单个表达式。但是,在代码中,

(define (sqrt-iter guess x)
    (if (good-enough? guess x)
    guess
    (sqrt-iter (improve guess x)
               x)))

我不明白当"猜测"和"x"已经陈述为"if"的后续表达式时,第 3、4 和 5 行如何有效。

在某些方案解释器中,一个if特殊形式可以在条件后跟一个或两个表达式,在其他(例如:Racket(中,条件后面必须跟两个表达式。但是在你的代码中,条件后面有两个表达式!这更像是一个缩进问题,请参阅:

(define (sqrt-iter guess x)
  (if (good-enough? guess x)       ; condition
      guess                        ; first expression  (consequent)
      (sqrt-iter (improve guess x) ; second expression (alternative)
                 x)))

澄清一下:guessx不是条件的结果和替代,它们是表达式(good-enough? guess x)good-enough?过程的参数,这只是条件部分。 请记住,if表达式的一般结构如下所示:

(if <condition>
    <consequent>
    <alternative>)

其中每个部分都是一个表达式。有关更多详细信息,请参阅文档。

guessxgood-enough?谓词的参数,"if"在以下guess(sqrt-iter ...)表达式之间进行选择。

不,在方案语言中,"if"语句可以后跟两个或三个表达式,而不仅仅是一个表达式。

(if test-exp then-exp else-exp)

即使在方案解释器的某些实现中,"if"语句必须后跟三个表达式,也不能省略"else-exp"。

更多详情请阅读:http://classes.soe.ucsc.edu/cmps112/Spring03/languages/scheme/SchemeTutorialA.html#condexp

相关内容

  • 没有找到相关文章

最新更新