我在 Racket 中写了一个免费的乘以进位 PRNG。我想用它provide
来限制对我库中某些功能的访问,并对它们强加合同。使用球拍文档(上面链接),我已将以下代码放在我的文件顶部为此:
(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 中执行合同的正确方法是什么?