Vlákno názorů k článku Podpora funkcionálního programování v Pythonu a knihovna functools (2. část) od johny - A načo nám to vlastne je? Ja by...

  • Článek je starý, nové názory již nelze přidávat.
  • 3. 8. 2023 21:27

    johny

    A načo nám to vlastne je? Ja by som to nepochopil, kebyže sa nestretnem s F#. V Pythone to vôbec nevynikne. Nejaký zložitý kód, ktorý neviem na čo mi bude.

    V podstate, currying a parciálne funkcie nám umožňujú nasledujúci kód.

    [9;-2;-3;-5;5;-8;4;3;0;-4] |> Seq.map(fun e -> e * 2)
        |> Seq.map ((+) 1)
        |> Seq.filter (fun e -> e > 0)
        |> Seq.sortDescending
        |> Seq.iter (printfn "%d")

    Operátorom |> posielame výsledok spracovania do ďalšej funkcie.

    let f1 = List.map ((+) 1)
    let f2 = List.filter (fun e -> e >= 0)
    let compose = f1 >> f2
    let res = compose [-5..5]
    
    printfn "%A" res

    Operátorom >> vytvárame kompozitné funkcie.

    Čož je mimoriadne elegantné a flexibilné.

    Možností je naozaj veľa:

    open System
    
    let add x y = x + y
    add 5 <| 10 |> Console.WriteLine
    (add 5) 10 |> Console.WriteLine
    (add 5) <| 10 |> Console.WriteLine
    add <| 5 <| 10 |> Console.WriteLine
    add 5 10 |> Console.WriteLine
    5 |> add <| 10 |> Console.WriteLine
    Console.WriteLine(add 10 5)
    Console.WriteLine((add 10) 5)
    Console.WriteLine((add 10) <| 5)
    Console.WriteLine((add <| 10 <| 5))

    3. 8. 2023, 21:31 editováno autorem komentáře

  • 4. 8. 2023 15:14

    atarist

    tak ono to pomůže i v jiných případech.

    Například printerr = partial(print, file=sys.stderr)