Hlavní navigace

Názor k článku Programovací jazyk OCaml: rekurze, pattern matching a práce se seznamy od johny - A nie je to trochu cheating použiť foldl?...

  • Článek je starý, nové názory již nelze přidávat.
  • 6. 10. 2023 11:38

    johny

    A nie je to trochu cheating použiť foldl? V OCaml/F# je to kompletný algoritmus sumy.

    Zaujímavé je, že to vytvorí funkciu pre typ aj pre inštanciu. (BTW, funguje aj haskellovský $ pre pipu). C# má tzv. extension methods, ale tam to je oveľa ťažkopádnejšie.

    def List.sum' [Add α] [Inhabited α] (l : List α) := l.foldl (λ x y => x + y) default
    
    def main: IO Unit := do
    
      let vals: List Nat := [1, 2, 3, 4, 5]
      IO.println vals.sum'
    
      let vals: List Nat := [1, 2, 3, 4, 5]
      IO.println (List.sum' $ vals)
    
      let vals: List Int := [-2, -1, 0, 1, 2, 3, 4, 5]
      IO.println vals.sum'
    
      let vals: List Float := [1.1, 2.2, 3.3, 4.4, 5.5]
      IO.println vals.sum'