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

如何返回列表副本:将奇数长度的子列表翻倍

OCaml 列表处理:翻倍奇数长度子列表

需求

返回一个列表的副本,其中奇数长度的子列表需被自身拼接一次(即翻倍)。

示例

输入

oddList [[]; [1]; [1;2]; [1;2;3]; []; [5;4;3;2;1]]

预期输出

[[]; [1; 1]; [1; 2]; [1; 2; 3; 1; 2; 3]; []; [5; 4; 3; 2; 1; 5; 4; 3; 2; 1]]

问题排查与修正

你尝试的代码未达预期,问题出在两个细节上:

let rec listes_paires l = 
  match l with
  | [] -> []
  | x :: r -> 
    if length x mod 2 = 0 then (x :: (listes_paires r))
    else ((x@x):: (listes_paires r));;

问题点

  1. 未正确引用List模块的length函数:OCaml中直接使用length会报错,需明确写成List.length,或者提前open List。
  2. 函数名与示例调用不匹配:示例中调用的是oddList,但你的函数名是listes_paires,会导致调用失败。

修正后的代码

以下是两种可行的修正版本:

版本1:打开List模块

open List

let rec oddList l = 
  match l with
  | [] -> []
  | x :: r -> 
    if length x mod 2 = 1 then (x @ x) :: oddList r
    else x :: oddList r

版本2:直接使用List.length

let rec oddList l = 
  match l with
  | [] -> []
  | x :: r -> 
    if List.length x mod 2 = 1 then (x @ x) :: oddList r
    else x :: oddList r

验证效果

调用修正后的oddList函数,输入示例中的列表,即可得到预期的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 21:32:11