有人能告诉我,当涉及到增量步骤(即list.fold>循环(时,列表/数组等被认为更安全的正式原因吗。
F#中的Exampel代码
功能方式(列表(
let rec sum lst =
match lst with
| [] -> 0
| x::xs -> x + sum xs
强制方式(增量(
let sum n m =
let mutable s = 0
for i=n to m do
s <- s + i
s
如果你所说的安全是指"更安全"——那么我想这会解释一些。首先,如果你正在对列表求和,fold
应该更安全,因为它消除了程序员正确索引列表的需要:
let sum lst =
let mutable s = 0
for i=0 to (List.length lst - 1) do
s <- s + lst.[i]
s
使用库函数可以完全避免很多陷阱
let sum lst =
let folder acc element =
acc + element
List.fold folder 0 lst
根据索引和列表长度,折叠可以为您处理所有的边缘情况。(注意:这也可以用List.reduce (+) lst
来完成,但是不能处理空列表,就像fold一样(。
简而言之,它可以防止程序员在愚蠢的索引数学上犯错误,并将注意力集中在正在做的事情的实际逻辑上。
编辑:具有讽刺意味的是,我在最初发布时把索引逻辑搞砸了