Neato

  • FizzyOrange@programming.dev
    link
    fedilink
    arrow-up
    0
    ·
    7 months ago

    I don’t think I would call this functional. Python is decidedly not at all functional - there’s no way to declare arbitrary functions inline, no chaining of map/filter etc.

    But the static types are definitely welcome. I didn’t know about the type keyword. Apparently it makes it support forward references.

    • wewbull@feddit.uk
      link
      fedilink
      English
      arrow-up
      1
      ·
      7 months ago

      Does it have higher-order functions? Yes, therefore you can use it to do functional programming.

      Everything else is syntactic sugar.

      • FizzyOrange@programming.dev
        link
        fedilink
        arrow-up
        0
        ·
        edit-2
        7 months ago

        You’re still limited by lambda expressions though. And in general the language is still statement based, not expression based. You can’t do a = if foo then x else y type things (except for the one-off and backwards x if foo else y; they were so close!).

          • FizzyOrange@programming.dev
            link
            fedilink
            arrow-up
            0
            ·
            7 months ago

            It’s not. In functional languages there’s no special case like this. All if-elses are expressions. It’s far superior. For example how do you do this with Python’s if-else expression?

            let x = if foo {
              let y = bar();
              baz();
              y
            } else {
              z
            }
            
            • nxdefiant@startrek.website
              link
              fedilink
              arrow-up
              0
              ·
              7 months ago

              x = foo(y:=bar(), baz(), y) or z should work assuming foo bar and baz are functions being called?

              if this is setting y to the effect of bar() + running baz after, then:

              x = [bar(), baz()][0] or z

              might work

              and if you need y to be defined for later use:

              x = [(y:=bar()), baz()][0] or z

              but thats from memory, not sure if that will even run as written.

              if I get to a real computer I'll try that with an actual if statement instead of a bastardized ternary.
              • FizzyOrange@programming.dev
                link
                fedilink
                arrow-up
                0
                ·
                7 months ago

                foo isn’t a function, it’s a bool. But in any case, as you can see the answer is “with terrible hacks”. Python is not a functional language. It is imperative.