【发布时间】:2018-04-03 06:14:27
【问题描述】:
我正在尝试在 OCaml 中创建一个函数,该函数给出列表中连续元素的“k-average”。例如:
average 4 [1; 2; 3; 4; 5; 6] = [2; 3; 4]
因为 1、2、3、4 的平均值是 2,所以 2、3、4、5 的平均值是 3,而 3、4、5、6 的平均值是 4。
我创建了一个平均列表的函数,但每 2 个元素:
let rec average2 xs = match xs with
| [] -> []
| x :: [] -> [x]
| x :: x' :: xs -> if xs = [] then [(x + x') / 2] else [(x + x') / 2] @
(average2 (x'::xs))
如何修改它以允许我平均 k 元素?
【问题讨论】:
-
你可以写
[x; x'] -> ...或x :: x' :: [] -> ...,而不是写x :: x' :: xs -> if xs = [] ...,(两者是等价的)并为你的匹配创建第三个模式:x :: x' :: xs,这里xs不会通过模式匹配的构造为空。
标签: list recursion functional-programming ocaml average