代码之家  ›  专栏  ›  技术社区  ›  Cam

重新定义R6R中的句法关键词

  •  1
  • Cam  · 技术社区  · 14 年前

    如何创建一个名为rnrs modified的库,它将使以下代码显示“你好,世界!”……?

    #!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")
    

    我用于修改RNR的代码是:

    #!r6rs
    (library (rnrs-modified)
             (export (rename (f set!)))
             (import (rnrs))
             (define f "Hello, world!"))
    

    有什么想法吗?


    更新:我发现 this 对于“MzScheme模块”。它不适用于R6RS方案,但它提供的功能基本上正是我想要的。我该怎么办 provide all-from-except 在R6RS方案中?

    1 回复  |  直到 14 年前
        1
  •  2
  •   grettke    14 年前

    R6R通过识别您想要定制的库(不包括您想要定制的部件),然后在您自己的库中定义这些部件,为实现您的目标提供了更多帮助。下面是一个例子:

    MyrnrsSLS

    (library
     (myrnrs)
    
     (export set!)
    
     (import
      (except (rnrs) set!)
      (rename (rnrs) (set! rnrs-set!)))
    
     (define set! "Hello, world."))
    

    单片机测试

    (import
     (except (rnrs) set!)
     (myrnrs))
     (display set!)(newline)    
    

    不幸的是,除了我们的球拍之外,没有什么比得上所有的;所以你可以创建一个重新定义集合的库!,但除了重新定义集合外,还必须导入RNR,然后为所有这些绑定键入导出!.你读了更多关于 here 讽刺的是,我想创建一个没有布景的图书馆!也是。