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

OCaml新手练习题求助:列表加权求和与奇偶规则求和实现

问题1 列表加权求和实现修正

你原有代码的错误如下:

  • 语法错误:sum(List.tl l (n-1 ) * (List.length l - 1)) 括号使用完全错误,sum需要接收两个参数,调用格式应为sum (List.tl l) (n+1)
  • 逻辑错误:不需要反复调用List.length计算长度,直接用额外参数记录当前元素的位置权重即可,你写的List.length l/List.length l恒等于1,完全不符合加权计算需求

修正后的实现代码:

let weighted_sum l =
  let rec aux lst pos =
    match lst with
    | [] -> 0
    | h :: t -> h * pos + aux t (pos + 1)
  in aux l 1

测试调用weighted_sum [4;7;3]会返回结果25,符合题目要求。

问题2 奇偶性规则累计计算实现

实现思路:以列表第一个元素作为初始累计值,遍历后续所有元素,每次判断当前累计值和当前元素的奇偶性(即mod 2的结果),相等则相加,不等则相减,遍历结束后得到的累计值就是最终结果。

实现代码:

let calc_parity l =
  match l with
  | [] -> 0 (* 空列表返回值可根据需求调整 *)
  | h :: t -> List.fold_left (fun acc x ->
      if acc mod 2 = x mod 2 then acc + x else acc - x
    ) h t

测试调用calc_parity [7;1;3;2;3]会返回结果6,符合示例要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 07:54:04