如何在PLT计划中制作模块?

时间:2009-07-12 17:28:10

标签: functional-programming lisp scheme racket

我试过这样做:

#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 个答案:

答案 0 :(得分:3)

您应该删除(module duck scheme/base行(和结束语)。

当您使用#lang scheme启动代码时,它会将您的代码有效地放入使用scheme语言的模块中。如果您想要较小的语言,也可以使用#lang scheme/base

(要真正相信,请这样做:

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

使用#lang的某个源文件,看看你得到了什么。)

(顺便说一下,你问题的标题很糟糕 - 它应该是“PLT Scheme”,因为这与其他实现无关。)