Stored procedures 使用用户定义的程序创建评估者

Stored procedures 使用用户定义的程序创建评估者,stored-procedures,racket,expression-evaluation,scribble,Stored Procedures,Racket,Expression Evaluation,Scribble,因此,我正在与DrRacket合作,由于我正在通过#lang scribble为我的程序制作一本手册,我想用@interactions来展示我的程序运行的实际示例,到目前为止,我得到了以下部分: #lang scribble/manual @(require (for-label racket)) @(require scribble/eval racket/sandbox) @(define my-evaluator (parameterize ([sandbox-output 'str

因此,我正在与DrRacket合作,由于我正在通过
#lang scribble
为我的程序制作一本手册,我想用
@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++主外部参照。scrbl
它正确地呈现为:

> (f)
5
有没有办法使用我所有的定义(在不同的文件中)来评估scribble?我尝试将第7行更改为:

(make-evaluator 'racket/base '(define (f) later) '(define later 5) #:require "mydefs.rkt")))
但当我试图渲染它时,它抛出如下内容:

make-evaluator: bad requires: "mydefs.rkt"
我不想在
makeevaluator
部分复制粘贴我的定义(它们太多了!)有什么修正吗?谢谢你们这些骗子

来自IRC的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)
                                   }
完美呈现

谢谢