首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在r6rs中重新定义句法关键字

在r6rs中重新定义句法关键字
EN

Stack Overflow用户
提问于 2010-07-21 16:58:15
回答 1查看 474关注 0票数 1

如何创建一个名为rnrs修改的库,使下面的代码显示"Hello,world!“?

代码语言:javascript
复制
#!r6rs
(import (rnrs-modified))
(display set!)

或者即使这样也是好的(可以说更好,实际上):

代码语言:javascript
复制
#!r6rs
(import (rnrs) (modified)) ;or (import (modified) (rnrs))
(display set!)

本质上,我希望能够在库中重新定义语法关键字(let、lambda、set!等),然后将该库导入到另一个库或顶级程序中,并使用这些重新定义的关键字。

不管怎么说,我总是得到这样的信息:

代码语言:javascript
复制
module: identifier already imported from a different source in:
  set!
  (lib "rnrs/main.ss")
  (lib "rnrs-modified/main.ss")

我使用的rnrs修改代码是:

代码语言:javascript
复制
#!r6rs
(library (rnrs-modified)
         (export (rename (f set!)))
         (import (rnrs))
         (define f "Hello, world!"))

有什么想法吗?

更新:我找到了“Update模块”的。它不是针对r6rs方案的,但它提供的功能基本上就是我想要的。如何在provide all-from-except方案中实现r6rs?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-07-22 18:35:16

R6RS通过标识要自定义的库(不包括要自定义的部分),然后在您自己的库中定义这些部分,从而更有助于实现您的目标。下面是一个示例:

myrnrs.sls

代码语言:javascript
复制
(library
 (myrnrs)

 (export set!)

 (import
  (except (rnrs) set!)
  (rename (rnrs) (set! rnrs-set!)))

 (define set! "Hello, world."))

test.scm

代码语言:javascript
复制
(import
 (except (rnrs) set!)
 (myrnrs))
 (display set!)(newline)    

不幸的是,除了在Racket中,没有什么比所有的都好;所以您可以创建一个库来重新定义set!,但是除了重新定义set之外,您还必须导入rnrs,然后输入所有这些绑定的导出!您阅读了更多关于这里的内容;具有讽刺意味的是,我也想创建一个没有set的库!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3301822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档