在at-exp语言中将未知符号读取为字符串

时间:2016-01-23 02:14:56

标签: racket scribble

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

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

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

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

1 个答案:

答案 0 :(得分:2)

scribble/text的作用是什么,它开始在"文本"中读取文件。模式,而at-exp开始阅读"球拍"模式。与#%top混淆不是你想要的。要执行与scribble/text相同的操作,您需要以文本模式启动的at-exp版本。但是,这还不存在。

来自scribble/reader的{​​{3}}函数执行此操作。但是,您必须定义自己使用它的#lang语言。为此,您可能会发现read-syntax-inside有帮助,但没有快速回答。

更新

我看了this documentation,答案似乎比我想象的要快得多。这样的事情应该有效:

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的所有内容对此进行了测试。