Как включить файлы в DrScheme?

Я использую DrScheme для работы через SICP и заметил, что некоторые процедуры (например, square) используются снова и снова. Я хотел бы поместить их в отдельный файл, чтобы я мог включать их в другие программы, не переписывая их каждый раз, но я не могу понять, как это сделать.

Я пытался:

(load filename)
(load (filename))
(load ~/path-to-directory/filename)
(require filename)
(require ~/path-to-directory/filename)
(require path-from-root/filename)

Ни одна из этих работ. Очевидно, я хватаюсь за соломинку - любая помощь очень ценится.


person Alex Basson    schedule 30.07.2009    source источник


Ответы (3)


Из вашего вопроса неясно, какой уровень языка вы используете; некоторые устаревшие языки могут сделать определенные механизмы недоступными.

Лучший механизм включения/абстракции — это модуль.

Во-первых, установите уровень языка на «модуль». Затем, если у меня есть эти два файла в одном каталоге:

Файл использует-square.ss:

#lang scheme

(require "square.ss")

(define (super-duper x) (square (square x)))

Файл Square.ss:

#lang scheme

(provide square)

(define (square x) (* x x))

Затем я могу нажать «Выполнить» в буфере «uses-square.ss», и все будет работать так, как вы ожидаете.

Предупреждение: непроверенный код.

person John Clements    schedule 16.12.2009

Я считаю, что вы ищете:

(include "relative/path/to/scheme/file.scm")

Выражение (require) предназначено для загрузки модулей.

person Michael Aaron Safyan    schedule 30.07.2009

В схеме MIT/GNU вы можете загрузить файл примерно так:

(load "c:\\sample-directory\\sample-file.scm")

Но я не знаю, работает ли это в DrScheme.

person pmk    schedule 06.10.2009
comment
он работает в DrScheme, если установлен язык SIPC, с помощью надстройки SICP - person dan; 27.01.2010