顶级功能私下共享范围

Lil*_*ung 3 scheme functional-programming

在方案中,可以使用set!创建两个(或更多)函数,它们之间共享一个私有范围:

(define f1 #f) ; or any other "undefined" value
(define f2 #f)

(let ((private some-value) (another-private some-other-value))
  (set! f1 (lambda ... <use of private variables> ...))
  (set! f2 (lambda ... <use of private variables> ...)))
Run Code Online (Sandbox Code Playgroud)

或者使用第三个变量:

(define functions
  (let ((private some-value) (another-private some-other-value))
    (list (lambda ... <use of private variables> ...)
          (lambda ... <use of private variables> ...))))

(define f1 (car functions))
(define f2 (cadr functions))
Run Code Online (Sandbox Code Playgroud)

然而,由于在第二个中使用set!了第一个和剩下的变量functions,所以这两个看起来都不优雅.有没有办法做到这一点没有?

hza*_*zap 5

(define-values (f1 f2)
  (let ((private values) ...)
    (values (lambda ...)
            (lambda ...))))
Run Code Online (Sandbox Code Playgroud)