我在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)
如何将其转换为更具功能性?
这是一个原始列表函数(也称为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,但结果不如递归版本清晰.
| 归档时间: |
|
| 查看次数: |
1242 次 |
| 最近记录: |