I have these these two functions
//Remove all even indexed elements from a list and return the rest
let rec removeEven l =
match l with
| x0::x1::xs -> x1::removeEven (xs)
| [] -> []
| [_] -> []
//combine list members into pairs
let rec combinePair l =
match l with
| x0::x1::xs -> (x0,x1) :: combinePair(xs)
| [] -> []
| [_] -> []
That work.
But I thought now that I was at it that I might as well learn a bit about tail recursion which I’m having a hard time getting the grasp of.
That’s why I thought that if I could get some help making functions I had made myself tail-recursive perhaps it would become more clear how it works, instead of reading an example somewhere which I might not understand as well as my own code (remember, I’m a complete f# newbie :))
Any other constructive comments about my code are of course most welcome!
A typical way of making functions tail-recursive in F# is using a list (
accin this case) to accumulate results and reversing it to get the correct order:Since we simply return results after each recursive call of
loop, these functions are tail-recursive.Your functions look quite nice, but I still have several comments:
match... withis a few spaces behindlec recdeclaration.functionkeyword is natural to use for shortening functions whenever you have a pattern offun t -> match t with.Applying above comments, your functions become as follows: