考虑:
(define (factorial x)
(let loop ((x x)
(acc 1))
(if (zero? x)
acc
(loop (sub1 x) (* x acc)))))
我不明白工作是如何让这里的。而且,我不明白这段代码。
答案 0 :(得分:4)
您的示例与
的作用相同(define (factorial x)
(define (loop x acc)
(if (zero? x)
acc
(loop (sub1 x) (* x acc))))
(loop x 1))
与
的作用相同 (define (factorial x)
(loop x 1))
(define (loop x acc)
(if (zero? x)
acc
(loop (sub1 x) (* x acc))))
要了解程序的工作原理,最好的建议是使用DrRacket中的步进器。 由于步进器必须以“中级”教学语言运行,因此将此版本(请注意最后一个示例)粘贴到DrRacket中。选择“中级”教学语言,然后单击步进按钮。
(define (factorial x)
(loop x 1))
(define (loop x acc)
(if (zero? x)
acc
(loop (sub1 x) (* x acc))))
(factorial 3)
有关显示步进器的图像,请参阅此问题:Fibonacci in Scheme