【问题标题】:Add the previous element for each element in a list in OCaml为 OCaml 列表中的每个元素添加前一个元素
【发布时间】:2017-03-05 13:43:59
【问题描述】:

我想做这样的事情:

如果我有以下列表:

[1;2;3;4;5]

我想得到这个:

[1;3;6;10;15] -> result of doing [0+1=1; 1+2=3; 3+3=6; 6+4=10; 10+5=15]

我有以下代码,但它不是尾递归

let sumsum l = List.fold_right (fun x t -> x::List.map ((+) x) t) l [];;

我被困在尾递归上,有人可以帮助我吗?

不使用 List.fold_right、List.fold_left 和 List.map 可以做到吗?

谢谢

【问题讨论】:

  • 您正在寻找scan :-)

标签: list recursion functional-programming ocaml tail-recursion


【解决方案1】:
let sumsum l =
  let rec aux a' acc = function
    | []    -> List.rev acc
    | a::tl -> let b=a+a' in aux b (b::acc) tl
  in
  aux 0 [] l
;;

测试

# sumsum [1;2;3;4;5];;
- : int list = [1; 3; 6; 10; 15]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-27
    • 2021-09-11
    • 2017-01-15
    • 2014-12-20
    • 2011-10-08
    • 1970-01-01
    • 2021-01-21
    • 1970-01-01
    相关资源
    最近更新 更多