I want to thank alinsoar, flamingo, and Oscar for their very helpful advice.
I decided to go with Oscar's approach, which (apparently) uses the racket graphic libraries as opposed to the special package put together by Neil Van Dyke (I simply had no luck with that one). Here is the important part of my code (with the definitions that are not graphics library dependent left out):
#lang racket
(require graphics/graphics)
(open-graphics)
(define vp (open-viewport "A Picture Language" 500 500))
(define draw (draw-viewport vp))
(define (clear) ((clear-viewport vp)))
(define line (draw-line vp))
;need a wrapper function so that the graphics library works with my code...
(define (vector-to-posn v)
(make-posn (car v) (car(cdr v))))
(define (segments->painter segment-list)
(lambda (frame)
(for-each
(lambda (segment)
(line
(vector-to-posn ((frame-coord-map frame) (start-segment segment)))
(vector-to-posn ((frame-coord-map frame) (end-segment segment)))))
segment-list)))
So, a few things to note:
1) as stated above, this uses the standard racket language, not the SICP language that is the purpose of Neil Van Dyke's implementation.
2) the 'draw-line' function in this library takes a viewport (which is basically a window) as a parameter and creates a function that takes two coordinates for parameters (and an optional color parameter that I did not use). However the 'coordinates' in this case are not the simple vectors that the exercises use. The coordinates are instances of the struct 'posn', which is basically just a wrapper for the x and y values.
The presence of this posn datatype meant that I had to wrap my vectors with a posn constructor before they could be used in the 'segments-painter' function. (The 'vector-to-posn' function is this wrapper). Note also that the word 'draw-line' used in the book's definition of 'segments-painter' is replaced with 'line', which is defined to be (draw-line vp).
3) interestingly, the racket graphics library defines the viewport coordinates a bit differently from what I had anticipated. The coordinate (0 0) is the top left point in the frame (I would have guessed bottom left) and (1 1) is bottom right. (Note that here I am talking in terms of the unit square. In the frame that I use in the code above the true coordinates for bottom right would be (500 500).)
Since the exercise that I was working on (2.49) involved drawing figures that have symmetry about the horizontal axis this little wrinkle does not matter, but otherwise it might surprise you. It occurs to me that one way around this 'inversion' is to use the 'flip-vert' function in the book, but I did not take the time to do that.
Thanks again for all of the help!