fork download
  1. // кратко
  2. let rec sec1 xs =
  3. match xs with a::_::t | a::([] as t) -> a :: sec1 t | _ -> []
  4.  
  5. // быстро
  6. let sec2 xs =
  7. let rec loop acc = function
  8. | a::_::t | a::([] as t) -> loop (a::acc) t
  9. | _ -> List.rev acc
  10. loop [] xs
  11.  
  12. //
  13. let sec3 xs =
  14. xs |> List.mapi (fun i e -> if i % 2 = 0 then Some e else None)
  15. |> List.choose id
  16.  
  17. open System.Linq
  18. let sec4 (xs : 'a list) =
  19. xs.Where(fun _ i -> i % 2 = 0) |> Seq.toList
  20.  
  21.  
  22.  
  23. let sp = [0..10]
  24. sp |> printfn "%A"
  25. sec1 sp |> printfn "%A"
  26. sec2 sp |> printfn "%A"
  27. sec3 sp |> printfn "%A"
  28. sec4 sp |> printfn "%A"
  29.  
Success #stdin #stdout 0.21s 26448KB
stdin
Standard input is empty
stdout
[0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10]
[0; 2; 4; 6; 8; 10]
[0; 2; 4; 6; 8; 10]
[0; 2; 4; 6; 8; 10]
[0; 2; 4; 6; 8; 10]