如何创建一个名为rnrs-modified的库,它将使以下代码显示“Hello,world!”......?
#!r6rs
(import (rnrs-modified))
(display set!)
甚至这样做会很好(实际上可能更好):
#!r6rs
(import (rnrs) (modified)) ;or (import (modified) (rnrs))
(display set!)
基本上我希望能够在库中重新定义语法关键字(let,lambda,set!等),然后将该库导入另一个库或顶级程序并使用这些重新定义的关键字。
但是我一直这样说:
module: identifier already imported from a different source in:
set!
(lib "rnrs/main.ss")
(lib "rnrs-modified/main.ss")
我用于rnrs-modified的代码是:
#!r6rs
(library (rnrs-modified)
(export (rename (f set!)))
(import (rnrs))
(define f "Hello, world!"))
有什么想法吗?
更新:我找到了'{mzscheme modules'this。这不是r6rs方案,但它提供的功能基本上正是我正在寻找的。如何在r6rs计划中进行provide all-from-except
?
答案 0 :(得分:2)
R6RS通过识别您要自定义的库,不包括您要自定义的部分,然后在您自己的库中定义这些部分,更有助于实现您的目标。这是一个例子:
<强> myrnrs.sls 强>
(library
(myrnrs)
(export set!)
(import
(except (rnrs) set!)
(rename (rnrs) (set! rnrs-set!)))
(define set! "Hello, world."))
<强> test.scm 强>
(import
(except (rnrs) set!)
(myrnrs))
(display set!)(newline)
不幸的是,除了像我们在Racket中一样,没有什么比这更好了。所以你可以创建一个重新定义set!的库,但你必须导入rnrs然后输入所有这些绑定的导出以及重新定义set!。您阅读了有关here的更多信息;具有讽刺意味的是,我也想创建一个没有set!的库。