2

我试过这样做:

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

什么是正确的方法?

4

1 回答 1

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”,因为这与其他实现无关。)

于 2009-07-12T17:54:03.243 回答