在Scheme中,两个过程(或宏)如何共享一个本地环境?

在Scheme中,两个过程(或宏)如何共享一个本地环境?,scheme,Scheme,因此,我的任务是在Scheme中创建两个过程或宏(未在赋值中指定)。这两个过程都应该修改它们共享的本地环境。有一个重要条件,即绑定只能从这两个过程访问,因此过程不会修改全局定义 程序1的任务是将局部变量设置为新值。 程序2的任务是向程序1设置的值添加一个数字 (过程15)=>5 (proc26)=>11 以下是我目前掌握的情况: (define proc1 (lambda (val) (let ((x 0)) (begin (set! x val) x)))) 我不知道

因此,我的任务是在Scheme中创建两个过程或宏(未在赋值中指定)。这两个过程都应该修改它们共享的本地环境。有一个重要条件,即绑定只能从这两个过程访问,因此过程不会修改全局定义

程序1的任务是将局部变量设置为新值。 程序2的任务是向程序1设置的值添加一个数字

(过程15)=>5

(proc26)=>11

以下是我目前掌握的情况:

(define proc1
 (lambda (val)
  (let ((x 0))
   (begin
   (set! x val)
   x))))
我不知道如何让proc2访问proc1的本地环境。我的猜测是使用call/cc或coroutine,但我不知道如何使用,你能帮我吗


谢谢大家!

两个过程如何共享非全局的自由变量:

(let((v 0))
(定义(公司)…)
(定义(12月)…)
这两个都可以从这里买到
)
现在,如果您想在全局环境中使用这两个过程,您可以
set

(定义公司)
(定义dec#f)
(让((v 0))
(set!inc(lambda()(set!v(+v1)))
(set!inc(lambda()(set!v(-v1(()))))
但还有第三种选择。这就是面向对象编程的工作原理:

#!r6rs
(进口)
(定义(制作peano v)
(定义(inc)(集合!v(+v1))v)
(定义(dec)(集合!v(-v1))v)
(定义(消息处理程序消息)
(案例msg)
((公司)公司)
((十二月)十二月)
(否则(引发(条件(生成错误)(生成消息条件“错误:未知消息”()()())))
消息处理程序)
(定义(peano公司peano)
((皮亚诺公司)))
(定义(peano dec peano)
((peano'dec)))
(定义peano(制作peano 5))
(皮亚诺公司皮亚诺)
; ==> 6.
(皮亚诺公司皮亚诺)
; ==> 7.
(皮亚诺公司皮亚诺)
; ==> 8.
(皮亚诺十二月)
; ==> 7.

非常感谢!第二个选项最适合我的解决方案,因为过程应该全局声明。这并不像我想象的那么复杂!你的例子对我帮助很大:)@ElisaDay谢谢。如果你觉得我的答案有帮助,你应该考虑通过点击