Keď som sa prvý krát bližšie zoznámil s list comprehensions v Pythone, tak som si pomyslel, aká super vec!
O pár rokov neskôr som narazil na F# a tam mi spadla sánka. Ten obsahuje bezhraničné možnosti spracovania dátových štruktúr. Python je len slabý odvar možností funkcionálneho programovania a aj to je zakamuflované kdesi v nič nehovoriacich moduloch ako itertools.
(Aj tak asi väčšina programátorov používa Pandas a pod. a nie built-in funkcie.)
Odtedy som presedlal na F# a Groovy keď treba pokročilú dátovú analýzu. Oba jazyky majú priamo zabudované funkcie a navyše query výrazy. (Ginq v Groovy je inšpirovaný LINQom zo C#.)
Groovy príklad
def numbers = [0, 1, 2, -3, -1, 9]
def res = GQ {
from n in numbers
where n > 0
orderby n in desc
select n
}
println res
def res2 = numbers.findAll { it > 0 }.sort { a, b -> b <=> a }
println res2
F# príklad
type User =
{ FirstName: string
LastName: string
Occupation: string
Salary: int }
let users = [
{ FirstName="Robert"; LastName="Novak"; Occupation="teacher"; Salary=1770 }
{ FirstName="John"; LastName="Doe"; Occupation="gardener"; Salary=1230 }
{ FirstName="Lucy"; LastName="Novak"; Occupation="accountant"; Salary=670 }
{ FirstName="Ben"; LastName="Walter"; Occupation="teacher"; Salary=2050 }
{ FirstName="Robin"; LastName="Brown"; Occupation="bartender"; Salary=2300 }
{ FirstName="Amy"; LastName="Doe"; Occupation="technician"; Salary=1250 }
{ FirstName="Joe"; LastName="Draker"; Occupation="musician"; Salary=1190 }
{ FirstName="Janet"; LastName="Doe"; Occupation="actor"; Salary=980 }
{ FirstName="Peter"; LastName="Novak"; Occupation="singer"; Salary=990 }
{ FirstName="Albert"; LastName="Novak"; Occupation="teacher"; Salary=1930 }
]
let users2 =
users
|> List.map (fun e ->
{| FirstName = e.FirstName
LastName = e.LastName |})
users2 |> List.take 3 |> List.iter (printfn "%A")
printfn "---------------------"
query {
for user in users do
select {| FirstName = user.FirstName; LastName = user.LastName |}
take 3
} |> Seq.iter (printfn "%A")
Budem piť Bud light keď môžem Prazdroj?