1
if reelID = reelWeights.Count - 1
    then Array.fold calc1 (0L,0) reelWeights.[reelID]
    else Array.fold calc2 (0L,0) reelWeights.[reelID]

パイプラインを使用してみましたが、少し遅くなるようです(理由はわかりません)。

reelWeights.[reelID]
    |> (if reelID = reelWeights.Count - 1 then Array.fold calc1 else Array.fold calc2) (0L,0)

私が行った場合

let calc x = if x then calc1 else calc2
Array.fold (calc reelID = reelWeights.Count - 1) (0L,0) reelWeights.[reelID]

次に、ループ内の条件を冗長的にチェックするという犠牲を払って見栄えがします。

4

2 に答える 2

5

calc1同じシグニチャを持っていると仮定しcalc2ます(または、関数ではなく値である場合は、同じタイプです)。

let calc = if reelID = reelWeights.Count - 1 then calc1 else calc2
Array.fold calc (0L, 0) reelWeights.[reelID]
于 2012-09-20T22:49:14.857 に答える
1

または一行で:

let weight = 
    Array.fold (if reelID = (reelWeights.Count - 1) then calc1 else calc2) (0L,0) reelWeights.[reelID]
于 2012-09-21T08:01:20.100 に答える