Вопрос

Я использую 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")
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top