0 lisp scheme conditional if-statement sicp
我正在通过SICP工作并参与了关于平方根代码的部分.我理解'if'语句只能跟随单个表达式.但是,在代码中,
(define (sqrt-iter guess x)
(if (good-enough? guess x)
guess
(sqrt-iter (improve guess x)
x)))
Run Code Online (Sandbox Code Playgroud)
当'guess'和'x'已经被陈述为'if'的结果表达式时,我不明白第3,第4和第5行是如何有效的.
在某些 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)))
Run Code Online (Sandbox Code Playgroud)
澄清:guess和x是不随之而来的和病症的替代方案中,它们对于所述参数good-enough?在表达过程(good-enough? guess x),这仅仅是个条件的一部分.请记住,if表达式的一般结构如下所示:
(if <condition>
<consequent>
<alternative>)
Run Code Online (Sandbox Code Playgroud)
每个部分都是表达式.有关详细信息,请参阅文档.