I feel like make-evaluator should do something like this when you call 
(make-evaluator ‘(special beginner)).  Is there a reason that it doesn’t?  

On Apr 14, 2014, at 5:43 PM, Matthias Felleisen <matth...@ccs.neu.edu> wrote:

> 
> On Apr 14, 2014, at 1:04 PM, Klaus Ostermann <klaus...@gmail.com> wrote:
> 
>> I'm using Scribble to write lecture notes on the "Beginning Student
>> Language".
>> 
>> To this end, I'm using
>> 
>> @(require (for-label lang/htdp-beginner))
>> 
>> to get the bindings for the functions defined in BSL.
>> 
>> However, if I want to illustrate an error, I get the wrong error message.
>> 
>> For instance,
>> 
>> @ex[(number->string "asdf")]
>> 
>> gives the ouput:
>> 
>>> (number->string "asdf")
>> 
>> number->string: contract violation
>> expected: number?
>> given: "asdf"
>> 
>> 
>> rather than the expected:
>> 
>>> (number->string "asdf")
>> 
>> number->string: expects a number, given "asdf"
>> 
>> What do I need to do to get the BSL error messages?
> 
> ;; Here is the code from the shared library in HtDP/2e: 
> 
> (require teachpack/2htdp/scribblings/img-eval)
> 
> (define-syntax-rule
>  (*sl-eval module-lang reader def ...)
>  ;; ===>>>
>  (let ()
>    (define me (parameterize ([sandbox-propagate-exceptions #f])
>                 (make-img-eval)))
>    (me '(require (only-in racket empty? first rest cons? sqr true false)))
>    (me '(require lang/posn))
>    (me '(require racket/pretty))
>    (me '(current-print pretty-print-handler))
>    (me '(pretty-print-columns 65))
>    (me 'def)
>    ...
>    (call-in-sandbox-context me (lambda () (error-print-source-location #f)))
>    (call-in-sandbox-context me (lambda () (sandbox-output 'string)))
>    (call-in-sandbox-context me (lambda () (sandbox-error-output 'string)))
>    (call-in-sandbox-context me (lambda () (sandbox-propagate-exceptions #f)))
>    (call-in-sandbox-context me (lambda ()
>                                 (current-print-convert-hook
>                                   (let ([prev (current-print-convert-hook)])
>                                     ;; tell `print-convert' to leave images 
> as themselves:
>                                     (lambda (v basic sub)
>                                       (if (convertible? v)
>                                           v
>                                           (prev v basic sub)))))
> 
>                                 (pretty-print-size-hook
>                                   (let ([prev (pretty-print-size-hook)])
>                                     ;; tell `pretty-print' that we'll handle 
> images specially:
>                                     (lambda (v w? op)
>                                       (if (convertible? v) 1 (prev v w? 
> op)))))
>                                 
>                                 (pretty-print-print-hook
>                                   (let ([prev (pretty-print-print-hook)])
>                                     ;; tell `pretty-print' how to handle 
> images, which is
>                                     ;; by using `write-special':
>                                     (lambda (v w? op)
>                                       (if (convertible? v) (write-special v 
> op) (prev v w? op)))))
> 
>                                 ((dynamic-require 'htdp/bsl/runtime 
> 'configure)
>                                  (dynamic-require reader 'options))))
>    (call-in-sandbox-context me (lambda () (namespace-require module-lang)))
>    (interaction-eval #:eval me (require 2htdp/image))
>    (interaction-eval #:eval me (require 2htdp/batch-io))
>    (error-display-handler
>     (lambda (msg exn)
>       (if (exn? exn)
>           (display (get-rewriten-error-message exn) (current-error-port))
>           (eprintf "uncaught exception: ~e" exn))))
>    me))
> 
> (require lang/private/rewrite-error-message)
>       
> (define-syntax-rule
>  (bsl-eval def ...)
>  (*sl-eval 'lang/htdp-beginner 'htdp/bsl/lang/reader def ...))
> 
> ;; Here is how I use this in chapter 1 to get error messages: 
> 
> @interaction[#:eval (bsl-eval)
> (string-length 42)
> ]
> 
> 
> It's not perfect but it comes reasonably close in most cases. 
> 
> -- Matthias
> 
> 
> ____________________
>  Racket Users list:
>  http://lists.racket-lang.org/users


____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to