BSL (Как разрабатывать программы): как импортировать код из отдельного файла в область определений? - PullRequest
0 голосов
/ 04 октября 2018

У меня проблема с BSL.Я хочу разделить мой код на отдельные вспомогательные файлы и использовать

(require "auxiliary-function.rkt") 

в начале для импорта разделенного кода в область определений.Однако это не работает, как предполагалось.Хотя явной ошибки не дано, похоже, что DrRacket просто не видит код в отдельном файле, и все, что я вижу, это ошибка

<auxiliary-function-name>: this function is not defined 

Очевидно,

(provide x)

не входит в BSL.Я прочитал руководство и этот ответ, но до сих пор не ясно, как заставить это работать.Это возможно даже в BSL?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Обратите внимание, что если вы делаете это для курса, эта стратегия может не быть принята для представления.

То, что я сделал для некоторых из моих собственных проектов, представляет собой шаблон, подобный следующему:

Сделайте так, чтобы один файл был написан на простом Racket и называется "provide.rkt", например:

; provide.rkt
#lang racket
(provide provide all-defined-out)

Затем вы можете использовать его для предоставления определенных функций или для всех определений из файла.

Для предоставления определенных функций

В вашем BSL-файле "библиотеки" вы можете указать в нем следующую информацию и использовать ее для предоставления нужных вам функций:

; <auxiliary-library>.rkt
; written in BSL
(require "provide.rkt")

(provide <auxiliary-function-name>)

(define (<auxiliary-function-name> ....) ....)
* 1015И, наконец, в вашем «основном» BSL-файле вам может потребоваться такая библиотека:
; written in BSL
(require "<auxiliary-library>.rkt")

(<auxiliary-function-name> ....)

Для предоставления всех определений из файла

В вашем BSL-файле «библиотеки»:вы можете потребовать предоставить в него и использовать это, чтобы предоставить все:

; <auxiliary-library>.rkt
; written in BSL
(require "provide.rkt")

(provide (all-defined-out))

(define (<auxiliary-function-name-1> ....) ....)

(define (<auxiliary-function-name-2> ....) ....)

...

Затем в вашем "основном" файле BSL вы можете потребовать библиотеку и получить все определения:

; written in BSL
(require "<auxiliary-library>.rkt")

(<auxiliary-function-name-1> ....)

(<auxiliary-function-name-2> ....)

...
0 голосов
/ 04 октября 2018

BSL не для вас.Если вы знаете, как управлять модулями, я рекомендую вам использовать полноценный Racket.

Если вы хотите создать вспомогательные библиотеки, я рекомендую вам разработать их в полном Racket, предоставить нужные вам идентификаторы, использовать htdp / error для формулирования сообщений об ошибках, и тогда будет работать «require».

...