DrScheme supports two forms of extension to the programming environment:
A teachpack extends the set of procedures that are built into a language in DrScheme. For example, a teachpack might extend the Beginning Student language with a procedure for playing sounds.
Teachpacks are particularly useful in a classroom setting, where an instructor can provide a teachpack that is designed for a specific exercise. To use the teachpack, each student must download the teachpack file and select it through the Language|Add Teachpack... menu item.
A tool extends the set of utilities within the DrScheme environment. For example, DrScheme's Check Syntax button starts a syntax-checking tool, and the Analyze button starts the MrSpidey tool.
Teachpacks are designed to supplement student programs with code that is beyond the teaching languages (Beginning Student, Intermediate Student, Advanced Student). For example, to enable students to play hangman, we supply a teachpack that
implements the random choosing of a word
maintains the state variable of how many guesses have gone wrong
manages the GUI.
All these tasks are beyond students in the third week and/or impose memorization of currently useless knowledge on students. The essence of the hangman game, however, is not. The use of teachpacks enables the students to implement the interesting part of this exercise and still be able to enjoy today's graphics without the useless memorization.
A single Scheme source file defines a teachpack (although
the file may access other files via require
). The
file must contain a module, according to the naming
convention laid out in the MzScheme manual (the name of the
file must be the name of the module, with an additional .scm or .ss extension on the filename). Each
exported syntax definition or value definition from the
module is provided as a new primitive form or primtive
operation to the user, respectively.
As an example example, the following teachpack provides a lazy cons implementation. To test it, be sure to save it in a file named lazycons.scm.
(module lazyconsmzscheme
(provide lcons lcar lcdr) (define-struct lcons (hd tl)) (define-syntax (lcons stx) (syntax-case stx () [(_ hd-exp tl-exp) (syntax (make-lcons (delay hd-exp) (delay tl-exp)))])) (define (lcar lcons) (force
(lcons-hd lcons))) (define (lcdr lcons) (force
(lcons-tl lcons))))
Then, in this program:
(define (lmap f l)
(lcons
(f (lcar l))
(lmap f (lcdr l))))
(define all-nums (lcons 1 (lmap add1
all-nums)))
the list all-nums
is bound to an infinite list
of ascending numbers.
For more examples, see the htdp directory of the teachpack directory in the PLT installation.
A separate manual describes the mechanism for defining a tool. See PLT Tools: DrScheme Extension Manual.