如何在本地更改球拍中的阅读规则?

How to locally change reading rules in racket?

我正在研究嵌入 J in Racket, and since I found an existing project,我想以此为基础。 就像现在一样,通过传递 J program string to a Racket form:

进行评估
> (j "4 * 1 + 4")
> 20

由于 J 使用引号、双引号和其他在作为字符串传递时需要转义的 ASCII 字符,我想将评估策略更改为:

> (j 4 * 1 + 4)
> 20

对应于评估 Racket 形式的 cdr,显然需要 locally change the reader。但是,当我尝试将评估函数更改为类似以下内容时:

(define (j exp)
  (jeval #reader"jexp.rkt" exp))

我得到一个 "unbound identifier" 错误,因为输入端口“exp”被随意解释,没有用 'exp' 代替它的值。我该如何处理?

像这样改变 reader 不能在解析过程的后期完成。在您给出的示例中,Racket 应该如何知道嵌入式 J 程序何时结束?

我想你想看看球拍指南的 "Creating a Language" 部分:

https://docs.racket-lang.org/guide/languages.html