Включение файла r5rs в другой файл в ракетке
Один из моих курсов использует DrRacket для некоторых разделов SICP. Мы работаем над метациклическим оценщиком, и у меня есть файл кода R5RS (set-car!
а также set-cdr!
), который мне нужно использовать с моей работой. Поскольку файл R5RS содержит примерно 500 строк, я бы предпочел хранить его в отдельном буфере. Как я могу включить его в определения моего буфера ответов? Кажется racket/include
требует #lang racket
, но set-car!
а также set-cdr!
не на этом языке.
1 ответ
Вы можете сделать следующее:
Напишите модуль в #lang r5rs и добавьте следующее после строки lang:
(#%provide (all-defined))
Пусть ваш буфер ответов также находится в #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 низкоуровневый модуль импорта, упомянутый в документации. Удачи!