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

OCaml类型错误求助:表达式类型为'a list却期望'b->'c

OCaml 类型错误排查与修正

错误提示翻译

该表达式类型为 'a list,但期望类型为 'b -> 'c

错误原因

你的aux递归函数在处理空列表分支时,错误地将列表l1当作函数来调用(l1 l2)。但l1是用来收集小于等于x元素的列表,并非函数,OCaml因此抛出类型不匹配的错误。

修正后的代码

let separe l x = 
  let rec aux l1 l2 l x = 
    match l with
    | [] -> (l1, l2)  (* 返回两个列表组成的元组,而非函数调用 *)
    | t::q when t <= x -> aux (t::l1) l2 q x
    | t::q -> aux l1 (t::l2) q x 
  in aux [] [] l x

补充说明

当前代码通过头插法收集元素,最终返回的l1和l2是原顺序的逆序。如果需要保持原列表的元素顺序,可以在返回时反转两个列表:

let separe l x = 
  let rec aux l1 l2 l x = 
    match l with
    | [] -> (List.rev l1, List.rev l2)
    | t::q when t <= x -> aux (t::l1) l2 q x
    | t::q -> aux l1 (t::l2) q x 
  in aux [] [] l x

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 08:42:01