在 at-exp 语言中将未知符号读取为字符串
Reading unknown symbols as strings in at-exp languages
我创建了一个提供各种功能的模块,包括#%module-begin。我想将它与 at-exp 语法一起使用,我可以使用以下 #lang 行:
#lang at-exp s-exp "my-library.rkt"
但是,这不会像使用 scribble/text 语言时那样将未知符号读取为字符串。我如何从我的库中提供此功能,以节省我在所有字符串周围写引号的麻烦?
我觉得可能和#%top函数有关。也许我可以从 scribble/text 以某种方式要求它,然后从我的图书馆提供它?
scribble/text
的作用是,它以 "text" 模式开始读取文件,而 at-exp
以 "racket" 模式开始读取文件。弄乱 #%top
不是你想要的。要执行与 scribble/text
相同的操作,您需要一个以文本模式启动的 at-exp
版本。不过那还不存在。
函数read-syntax-inside
from scribble/reader
does this. However, you will have to define your own #lang
language that uses it. For that, you might find this documentation有用,但没有快速答案。
更新:
我查看了 implementation of 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
re-providing racket/base
.
中的所有内容进行了测试
我创建了一个提供各种功能的模块,包括#%module-begin。我想将它与 at-exp 语法一起使用,我可以使用以下 #lang 行:
#lang at-exp s-exp "my-library.rkt"
但是,这不会像使用 scribble/text 语言时那样将未知符号读取为字符串。我如何从我的库中提供此功能,以节省我在所有字符串周围写引号的麻烦?
我觉得可能和#%top函数有关。也许我可以从 scribble/text 以某种方式要求它,然后从我的图书馆提供它?
scribble/text
的作用是,它以 "text" 模式开始读取文件,而 at-exp
以 "racket" 模式开始读取文件。弄乱 #%top
不是你想要的。要执行与 scribble/text
相同的操作,您需要一个以文本模式启动的 at-exp
版本。不过那还不存在。
函数read-syntax-inside
from scribble/reader
does this. However, you will have to define your own #lang
language that uses it. For that, you might find this documentation有用,但没有快速答案。
更新:
我查看了 implementation of 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
re-providing racket/base
.