有人可以提出更好和/或更优雅的实现:
让每个 xs = 让 rec each' acc 左右 = 与 | [] -> ACC | 右 -> 让 new_left = 左 @ [List.hd 右] 让下一个 = List.tl 对 let result = (List.hd right), left @ next each' (result::acc) new_left next 每个' [] [] xs
它这样做:
> 每个 [1..3];; 验证它: (int * int list) list = [(3, [1; 2]); (2, [1; 3]); (1, [2; 3])]
该函数也可以反向返回结果。这个想法是将所有元素作为具有元素和剩余元素列表的元组。