【发布时间】:2011-12-22 15:07:37
【问题描述】:
我已经在 Racket 中编写了一个免费乘以进位 PRNG。我想使用provide 来限制对我库中某些函数的访问,以及to impose contracts on them。使用球拍文档(上面链接),为此我将以下代码放在我的文件顶部:
(require data/queue)
(provide
(contract-out
(make-cmwc-gen (-> (listof integer?) integer? integer? integer? procedure?))
(make-default-cmwc-gen (-> integer? procedure?))
(make-cmwc-gen-raw (-> queue? integer? integer? integer? procedure?))
(init-cmwc-seed (-> integer? queue?))))
但是当我在 DrRacket 中运行文件时,出现以下错误:
. contract-out: not a provide sub-form in: (contract-out (make-cmwc-gen (-> (listof
integer?) integer? integer? integer? procedure?)) (make-default-cmwc-gen (-> integer?
procedure?)) (make-cmwc-gen-raw (-> queue? integer? integer? integer? procedure?))
(init-cmwc-seed (-> integer? queue?)))
在没有插入上述代码的情况下在 DrRacket 中运行时,代码不会引发错误,否则可以正常工作。
限制仅访问源文件之外的某些功能以及在 Racket 中执行合同的正确方法是什么?
【问题讨论】:
-
您使用的是哪个版本的 Racket?
contract-out是在 9 月添加的,因此如果您在 5.2 之前的版本中使用它,它将无法正常工作。此外,如果由于某种原因无法升级,请尝试使用provide/contract。 -
我相信你是对的。我从球拍文档中复制了一个示例程序,但它不起作用。此外,我的版本是 5.1.3 。不过,我知道在 5.2 之前已经执行了合同。它们在 5.1.3 中是如何执行的?