Me preguntaba si hay algo en F # como la cláusula where
de Haskell. Que permitiría transformar el siguiente códigoTiene F # algo como la cláusula Haskell's where?
let roulleteWheel numberGenerator (scoredPopulation:ScoredPopulation) =
let targetScore =
let totalScore = totalPopulationFitness scoredPopulation
Seq.head (numberGenerator 0.0 totalScore)
let isMatch (score, accumulatedScore) =
if (accumulatedScore >= targetScore) then
Some(score)
else
None
let accumulatedScores =
let scores = Seq.map (fun (_, score) -> score) scoredPopulation
Seq.skip 1 (Seq.scan (+) 0.0 scores)
Seq.pick isMatch (Seq.zip scoredPopulation accumulatedScores)
en el (OMI) versión ligeramente más legible
let roulleteWheel numberGenerator (scoredPopulation:ScoredPopulation) =
Seq.pick isMatch (Seq.zip scoredPopulation accumulatedScores)
where
let targetScore =
let totalScore = totalPopulationFitness scoredPopulation
Seq.head (numberGenerator 0.0 totalScore)
let isMatch (score, accumulatedScore) =
if (accumulatedScore >= targetScore) then
Some(score)
else
None
let accumulatedScores =
let scores = Seq.map (fun (_, score) -> score) scoredPopulation
Seq.skip 1 (Seq.scan (+) 0.0 scores)
ya que muestra la parte central de la primera función y los detalles de implementación más tarde (nitpicking, ¡Creo que!).
Supongo que no sería posible por la forma en que F # analiza los archivos de código. ¿Estoy en lo cierto? Al ver las palabras clave de F #, la referencia no parece mostrar nada como lo que estoy buscando. Si no existe, ¿hay alguna otra manera de factorizar mejor el código que se muestra? Yo diría que está bien, pero nunca se sabe ..