返回列表中位置x的项目

Mar*_*com 1 f# tail-recursion

在F#中阅读这篇文章的时候还是Tail Recursion,什么时候用?有几个人说,做事的"功能方式"是使用map/folds和高阶函数而不是递归和循环.

我有这个函数返回列表中位置x的项目:

let rec getPos l c =  if c = 0 then List.head l else getPos (List.tail l) (c - 1)
Run Code Online (Sandbox Code Playgroud)

如何将其转换为更具功能性?

wme*_*yer 5

这是一个原始列表函数(也称为List.nth).

可以使用递归,尤其是在创建基本构建块时.虽然模式匹配会更好,而不是if-else像这样:

let rec getPos l c =
   match l with
   | h::_ when c = 0 -> h
   | _::t -> getPos t (c-1)
   | [] -> failwith "list too short"
Run Code Online (Sandbox Code Playgroud)

可以用此表达此函数List.fold,但结果不如递归版本清晰.