LINUX.ORG.RU

DrRacket модули


0

1

Кто знает как в DrRacket создать и подключить модуль?
создаю файл functions.scm,
в другом файле (в том же каталоге) его импортирую:

(require 'functions)

говорит ошибка:
require: unknown module: 'functions

Пробовал и другие способы определения модуля из руководства, но не помогает: иногда сообщает что модуля нет по путям (далее пути поиска, исключая путь каталога проекта, там почему-то не ищет)



Последнее исправление: KUser (всего исправлений: 1)

Откуда запущен DrRacket этот ваш? Там и должен быть расположен модуль скорее всего. А запустили вы его скорее всего из левого места - поэтому и не находит.

Перейдите в директорию где расположен function.scm и запустите DrRacket оттуда, или используйте полный путь.

anonymous
()
Ответ на: комментарий от anonymous

Попробовал запустить из каталога проекта - изменений нет.
Может надо как-то собрать файл functions.scm ?

KUser
() автор топика
Ответ на: комментарий от Begemoth

В файле functions.scm определил модуль:

#lang racket

(module functions "."
(provide average)

(define (average x y)
(/ (+ x y) 2))
)

при импорте пишет:

functions.scm:3:0: module: illegal use (not at top-level) in:
(module functions "." (provide average) <...>

Что ему не понравилось?

KUser
() автор топика
Ответ на: комментарий от Begemoth
max@neptune:~/
% cat foo.rkt 
(module foo racket

  (define (average x y) (/ (+ x y) 2))

  (provide average))

max@neptune:~/
% racket
Welcome to Racket v5.0.1.
> (require "foo.rkt")
> (average 5 6)
11/2

Эти два примера определяют одинаковые модули. Почитай руководство по части определения модулей и задания путей к модулям.

Begemoth ★★★★★
()
Ответ на: комментарий от Begemoth

О!
Всё сработало!
Благодарю :)

PS: А в руководстве всё не так...

KUser
() автор топика
Ответ на: комментарий от Begemoth

Вот это не сработало, тут выдаёт ошибку
Вероятно ему не нравится что я определяю модуль:

#lang racket

(module functions racket
; (provide average)

(define (average x y)
(/ (+ x y) 2))

(provide average)
)

KUser
() автор топика
Ответ на: комментарий от KUser

Внимательней надо было читать руководство. #lang racket эквивалентно

(module name racket
 ...
)

где name определяется по имени файла. Форма (module ...) может использоваться только в top-level, на что Racket и указывал:

functions.rkt:3:0: module: illegal use (not at top-level) in: (module functions racket (define (average x y) (/ (+ x y) 2)) (provide average))

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

Begemoth ★★★★★
()
Ответ на: комментарий от Begemoth

Тоже заработало!
Надо будет поискать учебник какой-нибудь по DrRacket чтоб разобраться в нём.
Tnx!

KUser
() автор топика
Ответ на: комментарий от KUser

Нету никаких учебников по Racket, разве что, использующие Racket, типа PLaI. Читайте внимательнее встроенный мануал, он очень хорош.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.