Как мне сделать модуль в PLT Scheme? - PullRequest
2 голосов
/ 12 июля 2009

Я пытался сделать это:

#lang scheme
(module duck scheme/base
      (provide num-eggs quack)
      (define num-eggs 2)
      (define (quack n)
        (unless (zero? n)
          (printf "quack\n")
          (quack (sub1 n)))))

Но я получаю эту ошибку:

module: illegal use (not at top-level) in: 
(module duck scheme/base (provide num-eggs quack) (define num-eggs 2) (define (quack n) (unless (zero? n) (printf "quack\n") (quack (sub1 n)))))

каков правильный путь?

1 Ответ

3 голосов
/ 12 июля 2009

Вы должны удалить строку (module duck scheme/base (и закрывающую скобку).

Когда вы начинаете свой код с #lang scheme, он фактически помещает ваш код в модуль, который использует язык scheme. Вы также можете использовать #lang scheme/base, если хотите использовать язык поменьше.

(Чтобы действительно убедиться, сделайте это:

(parameterize ([read-accept-reader #t])
  (call-with-input-file "some file" read))

поверх исходного файла, который использует #lang и посмотрите, что вы получите.)

(И, кстати, заголовок вашего вопроса плохой - это должна быть "Схема PLT", поскольку это не относится к другим реализациям.)

...