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

Typed Racket中for*/list类型检查报错:返回值数量不符

Typed Racket 可扩展词法分析器类型错误修复

你遇到的类型错误根源是 in-indexed 返回两个值(索引与对应字符),而 Typed Racket 的 for*/list 在处理这种多值循环变量绑定时,类型检查器无法准确确认值的数量,从而抛出报错。

修正方案一:替换多值遍历方式

通过显式遍历索引+取字符的方式,避免多值绑定带来的类型推断问题:

#lang typed/racket

(define-type Indexed-String (Pairof Index String))

(: lex (-> String
           (Listof (-> Char Index (Option Indexed-String)))
           (Listof Indexed-String)))
(define (lex text lf)
  (for*/list ([i (in-range (string-length text))]
              [c (in-value (string-ref text i))]
              [f lf]
              [r (in-value (f c i))]
              #:when r)
    r))

修正方案二:显式标注多值类型

如果坚持使用 in-indexed,可以通过显式标注返回值类型,让类型检查器正确识别绑定变量:

#lang typed/racket

(define-type Indexed-String (Pairof Index String))

(: lex (-> String
           (Listof (-> Char Index (Option Indexed-String)))
           (Listof Indexed-String)))
(define (lex text lf)
  (for*/list ([(c i) : (Values Char Index) (in-indexed text)]
              [f lf]
              [r (in-value (f c i))]
              #:when r)
    r))

关键修改说明

  • 去掉了不必要的 (cast i Index):in-range 基于 string-length 的结果,i 本身就是合法的 Index 类型(非负整数)
  • 简化 #:when 条件为 #:when r:利用 Option 类型的布尔语义,直接判断是否为有效匹配结果

内容的提问来源于stack exchange,提问作者user32527061

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 10:03:26