【问题标题】:SICP lisp 'if' conditional expression explanationSICP lisp 'if' 条件表达式解释
【发布时间】:2014-03-12 03:32:02
【问题描述】:

我正在研究 SICP,并且已经了解了关于平方根代码的部分。我知道“if”语句后面只能跟单个表达式。但是,在代码中,

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

当 'guess' 和 'x' 已经被陈述为 'if' 的后件表达式时,我不明白第 3、4 和 5 行如何有效。

【问题讨论】:

  • 不,if 接受三个 s 表达式作为参数。 (good-enough? guess x) 是单个 s 表达式。 guess 是第二个,(square-iter ...) 是第三个。

标签: if-statement scheme lisp conditional sicp


【解决方案1】:

some Scheme 解释器中,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>)

每个部分都是一个表达式。更多详情请参考documentation

【讨论】:

  • 亲爱的驾车投票者:想发表评论吗?有关如何纠正或改进我的答案的任何建议?
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-26
      • 1970-01-01
      • 1970-01-01
      • 2018-04-18
      • 2023-03-27
      • 2011-06-22
      • 1970-01-01
      相关资源
      最近更新 更多