Включение файла r5rs в другой файл в ракетке - PullRequest
5 голосов
/ 28 ноября 2011

Один из моих курсов использует DrRacket для некоторых разделов SICP. Мы работаем над метациклическим оценщиком, и у меня есть файл кода R5RS (set-car! и set-cdr!), который мне нужно использовать в моей работе. Поскольку файл R5RS содержит примерно 500 строк, я бы предпочел хранить его в отдельном буфере. Как я могу включить его в определения моего буфера ответов? Похоже, racket/include требует #lang racket, но set-car! и set-cdr! не на этом языке.

1 Ответ

9 голосов
/ 28 ноября 2011

Вы можете сделать следующее:

  1. Запишите модуль в # lang r5rs и добавьте следующее после строки lang:

    (#%provide (all-defined))
    
  2. Ваш буфер ответов также находится в # lang r5rs , и используйте #% require , чтобы получить его определения:

    (#%require "some-module.ss")
    

Например, если у меня есть 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, упомянутый в документации .Удачи!

...