0

我创建了一个提供各种功能的模块,包括#%module-begin。我想将它与 at-exp 语法一起使用,我可以使用以下 #lang 行来做到这一点:

#lang at-exp s-exp "my-library.rkt"

但是,这不会将未知符号读取为字符串,例如在使用 scribble/text 语言时会发生这种情况。如何从我的库中提供此功能,以节省我在所有字符串周围写引号的时间?

我认为这可能与 #%top 函数有关。也许我可以从涂鸦/文本中以某种方式要求它,然后从我的库中提供它?

4

1 回答 1

2

什么scribble/text是它开始以“文本”模式at-exp读取文件,而开始以“球拍”模式读取文件。在这里捣乱#%top不是你想要的。要执行与 相同的操作scribble/text,您需要一个at-exp以文本模式启动的版本。不过,那还不存在。

函数read-syntax-insidefromscribble/reader执行此操作。但是,您必须定义自己的#lang语言来使用它。为此,您可能会发现此文档很有帮助,但没有快速的答案。

更新:

我查看了 的实现scribble/text,答案似乎比我想象的要快得多。像这样的东西应该工作:

my-library/lang/reader.rkt

#lang s-exp syntax/module-reader

my-library/main

#:read        scribble:read-inside
#:read-syntax scribble:read-syntax-inside
#:whole-body-readers? #t
#:info        (scribble-base-reader-info)

(require (prefix-in scribble: scribble/reader)
         (only-in scribble/base/reader scribble-base-reader-info))

测试它:

#lang my-library
This is text
@(list 'but 'this 'is 'not)

我通过my-library/main.rkt重新提供从racket/base.

于 2016-01-23T03:48:17.287 回答