誰かがこれのより良いおよび/またはよりエレガントな実装を提案できますか:
各 xs =
let rec each' acc left right =
と正しく一致する
| | [] -> ACC
| | 右 -> let new_left = 左 @ [List.hd 右]
let next = List.tl 右
let result = (List.hd right), left @ next
each' (result::acc) new_left 次へ
each' [] [] xs
それはそれをします:
> 各 [1..3];; val it : (int * int list) list = [(3, [1; 2]); (2, [1; 3]); (1, [2; 3])]
この関数は、結果を逆方向に返すこともできます。アイデアは、要素と残りの要素のリストを持つタプルとしてすべての要素を取得することです。