如何在Typed Racket中将字符串解析为列表?
在Typed Racket中解析S表达式字符串为列表的简便方法
不用自己从头实现解析逻辑,Typed Racket可以直接复用Racket内置的S表达式读取工具,这是最简便的方案:
核心思路
Racket的read函数可以直接从输入端口读取并解析S表达式,配合open-input-string就能把字符串转换成可供读取的输入端口,一步得到目标列表结构。
代码实现
(require typed/racket) ;; 定义类型标注:输入字符串,输出解析后的S表达式列表 (: parse-sexp (-> String (Listof Any))) (define (parse-sexp s) (read (open-input-string s))) ;; 测试示例 (parse-sexp "(+ 1 (/ 2 (inc 0)))") ;; 运行结果:(list '+ 1 (list '/ 2 (list 'inc 0)))
补充说明
read会自动处理嵌套的S表达式,完全匹配你的需求场景- 如果需要更严格的类型约束,可以根据实际解析的表达式结构,把返回类型
(Listof Any)替换为更具体的递归类型,比如:(define-type SExp (U Symbol Number (Listof SExp))) (: parse-sexp (-> String SExp)) - 若要一次性解析字符串中的多个S表达式,改用
read-all函数即可,它会返回所有解析结果的列表
内容的提问来源于stack exchange,提问作者Someone
相关产品推荐
相关产品推荐

