将r5rs文件包含在球拍中的另一个文件中

时间:2011-11-28 03:12:23

标签: scheme sicp racket

我的一门课程是将DrRacket用于SICP的某些部分。我们正在研究metacircular评估员,我有一个R5RS代码文件(set-car!set-cdr!),我需要将其与我的工作一起使用。因为R5RS文件大约是500行,所以我更喜欢将它保存在单独的缓冲区中。如何将其包含在我的答案缓冲区的定义中?看来racket/include需要#lang racket,但set-car!set-cdr!不在该语言中。

1 个答案:

答案 0 :(得分:9)

您可以执行以下操作:

  1. #lang r5rs 中编写模块,并在lang行后添加以下内容:

    (#%provide (all-defined))
    
  2. #lang r5rs 中也有你的答案缓冲区,并使用#%require 来提取其定义:

    (#%require "some-module.ss")
    
  3. 例如,如果我的 f1.ss 包含以下内容:

    #lang r5rs
    (#%provide (all-defined))
    (define (f x)
      (* x x))
    

    f2.ss ,内容如下:

    #lang r5rs
    (#%require "f1.ss")
    (display (f 3))
    (display (f 4))
    

    然后如果我运行 f2.ss ,它会在显示916时执行相应的操作,并且其Interactions缓冲区将了解用 f1.ss 编写的所有定义。

    这使用Racket-specfic低级模块导入documentation中提到的内容。祝你好运!