使评估人员使用用户定义的程序

时间:2014-12-11 23:39:22

标签: stored-procedures racket expression-evaluation scribble

因此,我正在与DrRacket合作,因为我正在通过#lang scribble为我的程序制作手册,所以我希望使用{{1}来运行我的程序的实际示例到目前为止,我已经有了这个部分:

@interactions

当我做的时候

#lang scribble/manual
@(require (for-label racket))
@(require scribble/eval racket/sandbox)
@(define my-evaluator
   (parameterize ([sandbox-output 'string]
                  [sandbox-error-output 'string])
     (make-evaluator 'racket/base '(define (f) later) '(define later 5))))

然后我运行@interaction[#:eval my-evaluator]{ @(f) } 它正确呈现为:

scribble --htmls ++main-xref-in manual.scrbl

有没有办法使用我的所有definitios(在不同的文件中)来评估使用scribble?我尝试更改第7行:

> (f)
5

但是当我尝试渲染它时,它会抛出这样的东西:

(make-evaluator 'racket/base '(define (f) later) '(define later 5) #:require "mydefs.rkt")))

我不想复制粘贴我的定义make-evaluator: bad requires: "mydefs.rkt" 部分(他们很多!)任何修复?谢谢racketeers!

1 个答案:

答案 0 :(得分:0)

来自IRC的

asumu #racket帮我解决了这个问题。 我所需要的只是做到这一点:

@(define my-evaluator
   (parameterize ([sandbox-output 'string]
                  [sandbox-error-output 'string])
     (make-base-eval #:lang 'racket '(define (f) later) 
                     '(define later 5) 
                     '(require "../man/manager.rkt"))))

请注意,我只是引用了require语句,而不是使用关键字。

使用

@interaction[#:eval my-evaluator]{
                                  @(define man (new manager%))@(send man crear-nodo '9)
                                   }

完美呈现。

谢谢!