Disallowing Specific Functions
It would be handy to be able to set! a function such as reverse to an expression which raises an error in a module. PLT Scheme does not allow this. However, it provides a different way through a module provide to export a binding as a different name than the one inside of the module itself:
rename-out
.
The following code illustrates how to bar a particular tested file from using reverse or append; note, however, that this will not autodetect if the students themselves implement such a function, and so hand-checking will still likely be necessary.
#lang scheme
(provide (rename-out (d-reverse reverse))
(rename-out (d-append append)))
(define-syntax disallow
(syntax-rules ()
((~ func)
(lambda args
(error (format "Disallowed function ~a called" (quote func)))))))
(define d-reverse (disallow reverse))
(define d-append (disallow append))
--
TerryVaskor - 12 Mar 2009
Topic revision: r2 - 2010-02-17
- BobCui