You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 11:44:52