我知道如何反转“手动编码”列表:
let rev_list l =
let rec rev_acc acc = function
| [] -> acc
| hd::tl -> rev_acc (hd::acc) tl
in
rev_acc [] l
现在我尝试仅反转那些处于偶数位置的元素,这意味着输入:
Function([0;1;2;3;4;5;6;7])
返回是:
[6;1;4;3;2;5;0;7]
如果我们假设我们计算0中的元素,我该怎么做?
答案 0 :(得分:1)
(* integrate [x1;x2;x3] [y1;y2;y3] = [x1;y1;x2;y2;x3;y3] *)
let integrate l1 l2 =
let rec integrt acc = function
| [], [] -> List.rev acc
| hd::tl,[] | [], hd::tl -> integrt (hd::acc) (tl,[])
| hd1::tl1, hd2::tl2 -> integrt (hd2::hd1::acc) (tl1,tl2)
in
integrt [] (l1,l2)
let rev_list_even_pos l=
let rec rev r_acc acc i = function
| [] -> integrate r_acc (List.rev acc)
| hd::tl ->
if i mod 2 = 0 then rev (hd::r_acc) acc (i+1) tl
else rev r_acc (hd::acc) (i+1) tl
in
rev [] [] 0 l
诀窍是使用两个单独的列表:一个存储颠倒的元素,另一个存储元素按原始顺序。