如何在本地更改球拍中的阅读规则?
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" 部分:
我正在研究嵌入 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" 部分: