【问题标题】:Making evaluators with user-defined procedures使用用户定义的程序制作评估器
【发布时间】:2014-12-11 23:39:21
【问题描述】:

所以我正在与 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 ++main-xref-in manual.scrbl,它正确呈现为:

> (f)
5

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

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

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

make-evaluator: bad requires: "mydefs.rkt"

我不想在make-evaluator 部分复制粘贴我的定义(它们很多!)有什么解决办法吗?谢谢敲诈者!

【问题讨论】:

    标签: stored-procedures racket expression-evaluation scribble


    【解决方案1】:

    来自 IRC #racket 的asumu 帮助我解决了这个问题。 我只需要这样做:

    @(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)
                                       }
    

    完美呈现。

    谢谢!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-30
      • 2023-03-08
      • 1970-01-01
      • 2019-05-03
      • 1970-01-01
      • 2014-01-28
      • 2021-02-20
      • 1970-01-01
      相关资源
      最近更新 更多