Как мне сделать модуль на схеме PLT?

Я пробовал это сделать:

#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)))))

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


person unj2    schedule 12.07.2009    source источник


Ответы (1)


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

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

(Чтобы по-настоящему убедиться, сделайте следующее:

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

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

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

person Eli Barzilay    schedule 12.07.2009