关于封装和封闭,我真的不明白.我相信封装是不可更改的,除非它被代码更改.但是当我被要求解释如何在代码上应用闭包和封装时,我无法理解.
例如 :
(define new-cercle #f)
(let ((n 0))
(set! new-cercle
(lambda (rayon)
(begin
(set! n (+ n 1))
(lambda (msg)
(cond ((eq? msg ’circonference)
(* 2 3.14 rayon))
((eq? msg ’surface)
(* 3.14 rayon rayon))
((eq? msg ’nb-cercles)
n)))))))
Run Code Online (Sandbox Code Playgroud)
该n封装,对不对?所以问题是:解释如何在此代码上应用封装和闭包.
我不明白的另一件事是为什么let必须高于lambda?为什么当我把它放在下面时lambda,功能不能很好并且没有累加器?
(define acc
(let ((n 1))
(lambda (x)
(set! n (* n x))
n)))
Run Code Online (Sandbox Code Playgroud)
我希望有人会以一种简单的方式向我解释这一点,因为当我谷歌它时,说实话,我对大多数主题的复杂例子都不了解.