小编Zok*_*Zok的帖子

封装和封闭有什么区别?

关于封装和封闭,我真的不明白.我相信封装是不可更改的,除非它被代码更改.但是当我被要求解释如何在代码上应用闭包和封装时,我无法理解.

例如 :

(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)

我希望有人会以一种简单的方式向我解释这一点,因为当我谷歌它时,说实话,我对大多数主题的复杂例子都不了解.

lisp scheme closures

3
推荐指数
2
解决办法
706
查看次数

标签 统计

closures ×1

lisp ×1

scheme ×1