쌍으로 항목을 서로 바꿀 수있는 좋은 방법이 있다는 것이 긍정적입니다 ([1; 2; 3; 4] -> [2; 1; 4; 3 ]) 내가 좋아하는 것에 너무 많은 덧붙이기를하고 있지만 최선의 방법을 잘 모르겠다.F # 목록의 모든 항목 쌍 바꾸기
let swapItems lst =
let f acc item =
match acc with
| [] -> [item]
| hd :: next :: tl when tl <> [] -> [next] @ tl @ [item;hd]
| _ -> item :: acc
List.fold f [] lst
어떻게 향상시킬 수 있습니까? 이것은 짝수 길이의 목록에서만 작동합니다.
let rec swapItems = function
| []
| _::[] as l -> l
| a::b::t ->
b::a::(swapItems t)
:이 약
나는이 방법이 약간 더 우아한'function :: a :: b :: t -> b :: a :: t | a -> failwith "충분하지 않은 요소"라고 생각한다. " –
brillant thanks, and curses to F # 항상 간단한 것을 만들기 때문에) # – Dylan
@jpalmer, 왜 그가이 일을하는지 모르겠다.하지만 나는이 솔루션이 홀수 개의 요소 목록에 대해 작동하기를 원했다고 생각했다. –