Вопрос
Я использую DrScheme для работы через SICP, и я заметил, что определенные процедуры (например, square
) используются снова и снова. Я хотел бы поместить их в отдельный файл, чтобы я мог включать их в другие программы без необходимости каждый раз переписывать их, но я не могу понять, как это сделать.
Я пробовал:
(load filename)
(load (filename))
(load ~/path-to-directory/filename)
(require filename)
(require ~/path-to-directory/filename)
(require path-from-root/filename)
Ни одна из этих работ. Очевидно, что я хватаюсь за соломинку - любая помощь очень ценится.
Решение
Из вашего вопроса не ясно, какой уровень языка вы используете; некоторые устаревшие языки могут сделать определенные механизмы недоступными.
Лучший механизм включения / абстракции - это модуль.
Во-первых, установите свой уровень языка на "модуль". Затем, если у меня есть эти два файла в одном каталоге:
Файл использует-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))
Тогда я могу нажать " запустить " на " использует-квадрат.ss " буфер и все будет работать так, как вы ожидаете.
Предупреждение: непроверенный код.
Другие советы
Я полагаю, что вы ищете:
(include "relative/path/to/scheme/file.scm")
(Требуется) выражение для загрузки модулей.
В схеме MIT / GNU вы можете загрузить файл с чем-то вроде этого:
(load "c:\\sample-directory\\sample-file.scm")
Но я не знаю, работает ли он в DrScheme.
(require "~/path-to-directory/filename")