Мне было интересно, есть ли в F # что-то вроде предложения 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)
в (imo) немного более читаемую версию
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)
, поскольку она сначала показывает основную часть функции и детали реализациипозже (придираюсь, я думаю!).
Я предполагаю, что это будет невозможно, если F # проанализирует файлы кода.Я прав?Глядя на ссылку на ключевые слова F #, я не вижу ничего похожего на то, что я ищу.Если его не существует, есть ли другой способ улучшить выделенный код?Я бы сказал, что все в порядке, но ты никогда не знаешь ..