列表与增量值安全性



有人能告诉我,当涉及到增量步骤(即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一样(。

简而言之,它可以防止程序员在愚蠢的索引数学上犯错误,并将注意力集中在正在做的事情的实际逻辑上。

编辑:具有讽刺意味的是,我在最初发布时把索引逻辑搞砸了

相关内容

  • 没有找到相关文章

最新更新