如何让Racket命令行显示以反引号开头的输入表达式?
Racket REPL中反引号输入不显示的原因与解决办法
原因
这是Racket交互式解释器(REPL)的默认行为:当你输入带反引号(准引用)的表达式时,REPL会自动对其进行准引用展开,回显内容时直接显示展开后的结果,而非你输入的原始带反引号的形式。比如输入3,REPL会将其展开为3对应的实际值3,所以你看不到输入的反引号。
解决办法
方法1:手动读取并打印原始输入
修改测试代码,先读取输入字符串并显示,再解析:
(define (parse-with-echo) (let ([input-str (read-line)]) (displayln input-str) ; 显示你输入的原始内容 (parse (read (open-input-string input-str)))))
调用(parse-with-echo)后输入3,会先输出你输入的3,再返回解析结果(num 3)。
方法2:直接在代码中写死测试表达式
不需要通过read输入,直接运行包含反引号的表达式:
(parse `3)
此时REPL会完整显示你输入的(parse 3),再输出结果(num 3)`。
方法3:读取后先打印原始S表达式
调整测试逻辑,读取输入后先打印原始的S表达式,再解析:
(let ([sexp (read)]) (print sexp) (newline) (parse sexp))
输入3时,REPL会先输出3,再返回(num 3)。
内容的提问来源于stack exchange,提问作者Roger Costello
相关产品推荐
相关产品推荐

