我正在与 Racket 和 Dr. Racket 一起研究 SICP 书。我也在看以下讲座:
在第 3 章,作者介绍了命令式编程的概念。
为了说明含义,他们将使用函数式编程的阶乘过程的实现与使用命令式编程的实现进行了对比。
下面你有一个使用函数式编程的迭代过程的递归定义:
(define (factorial-iter n)
(define (iter n accu)
(if (= n 0)
accu
(iter (- n 1) (* accu n))))
; (trace iter)
(iter n 1))
在教授要介绍一个命令式实现之前,我尝试了自己。
我使用命令“set!”到达了这段代码:
(define (factorial-imp n count product)
(set! product 1)
(set! count 1)
(define (iter count product)
(if (> count n)
product
(iter (add1 count) (* product count))))
(iter count product))
但是,教授的实现与我的命令式实现完全不同:
(define (factorial-imp-sicp n)
(let ((count 1) (i 1))
(define (loop)
(cond ((> count n) i)
(else (set! i (* count i))
(set! count (add1 count))
(loop))))
(loop)))
两个代码,我的实现和教授的代码,都达到了相同的结果。但我不确定它们是否具有相同的性质。
因此,我开始问自己:我的实施真的势在必行吗?只需使用“设置!” 保证?
我仍然在我的辅助迭代过程中使用参数,而教授的辅助迭代函数根本没有任何参数。这是回答我问题的核心吗?
谢谢!所以用户一直在帮助我很多!