Я исхожу из фона SML и чувствую себя вполне комфортно с функциями высокого порядка. Но я действительно не понимаю идею понимания списка. Есть ли ситуация, когда понимание списка более подходит, чем функции высокого порядка на List
и наоборот?
Я где-то слышал, что понимание списка медленнее, чем функции высокого порядка, следует ли мне избегать использования его при написании критически важных функций?
В качестве примера рассмотрим Проецирование списка списков эффективно в F #, где ответ @cfern содержит две версии с использованием функции списка и функций высокого порядка соответственно:
let rec cartesian = function
| [] -> [[]]
| L::Ls -> [for C in cartesian Ls do yield! [for x in L do yield x::C]]
и
let rec cartesian2 = function
| [] -> [[]]
| L::Ls -> cartesian2 Ls |> List.collect (fun C -> L |> List.map (fun x->x::C))