首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >` `scribble/lp`中` `typed/racket`的用法

` `scribble/lp`中` `typed/racket`的用法
EN

Stack Overflow用户
提问于 2013-09-19 00:47:08
回答 2查看 328关注 0票数 5

是否可以在#lang scribble/lp中使用其他#lang进行识字编程?

例如,我想在#lang scribble/lp中使用#lang typed/racket。如何实现这一点?

EN

回答 2

Stack Overflow用户

发布于 2013-12-06 01:35:00

它看起来不是这样的,但您可以使用带有scribble/eval的类型化/拍子赋值器。

代码语言:javascript
复制
    #lang scribble/manual
    @(require racket/sandbox
              scribble/eval)
    @(define my-evaluator
       (parameterize ([sandbox-output 'string]
                      [sandbox-error-output 'string])
         (make-evaluator 'typed/racket/base)))
    @interaction[#:eval my-evaluator

                 (: my-sqr (Real -> Real))
                 (define (my-sqr x)
                   (* x x))
                 (my-sqr 42)]

取自here的例子。

票数 1
EN

Stack Overflow用户

发布于 2016-06-17 23:12:44

戴利:有两种方法。首先,您可以简单地将代码放在一个子模块中,并立即请求它。其次,您可以使用 ,它允许您指定底层模块语言。

第一种方法

由于an issue,您必须将整个过程包装在一个(begin …)中,尽管有一个pull请求应该会在途中修复这个问题。

代码语言:javascript
复制
#lang scribble/lp2

@chunk[<*>
       (begin
         (module main typed/racket
           (define a : Number 1)
           (provide a)
           (module moo racket/base '…)
           (module+ test
             (require typed/rackunit)
             (check-equal? a (+ 1/2 1/2))))

         (require 'main)
         (provide (all-from-out 'main))

         (module test typed/racket
           (require (submod ".." main test))))]

请记住,这些都是子模块,因此不能将test模块放入main中,因为它不会被执行。在这里,我在main中有一个(module+ test …),根级别的test模块需要它。如果根目录下的(module test被注释掉,那么测试就不会被执行。

同样的问题也适用于从另一个模块请求moo时,您必须使用(require (submod "myfile.lp2.typed.rkt" main moo)),或者创建一个“别名”,就像上面为testmain所做的那样。

还要记住,子模块嵌套越多,它被访问和/或实例化的次数就越多(不确定是哪个)。这可能会严重影响类型化/球拍程序的加载速度,因为它们本身已经被访问和/或实例化多次。您可以通过在代码中添加(begin-for-syntax (displayln 'executed))来查看这一点,它会打印很多次。

第二种方法

我的scribble/lp2分支hyper-literate (用于超文本编程)只改变scribble/lp2,其余的依赖于scribble的原始版本。

我不能保证向后兼容,因为我目前正在修复一些bug,并添加额外的功能,比如能够重新打印chunk以刷新读者的记忆等。不过,我链接到的stackoverflow-q-18877881分支应该保持稳定。更新的东西将放在master中。

这是一个很小的示例文件。这是a more complete example in test/test.hl.rkt

代码语言:javascript
复制
#lang hyper-literate/typed typed/racket/base

@(require (for-label typed/racket/base
                     typed/rackunit))

@title{Title}

Hello world.

@chunk[<*>
       (require typed/rackunit)

       ;; Would give an error as typed/racket/base is used on the #lang line:
       ;curry

       (check-equal? ((make-predicate One) 1) #t)

       (define (f [x : 'e123]) x)

       (define ee (ann (f 'e123) 'e123))
       (provide ee)]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18877881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档