bslatkin

Joined 17 years ago

Karma
1,139
Submissions
192
Member since
May 6
https://onebigfluke.com

https://twitter.com/haxor

View on Hacker News

Recent submissions

Comment · 3 years ago
Comment · 3 years ago
Great! Please send it my way so I don't miss it. Thank you
Comment · 3 years ago
Scala has a lot of interesting concepts in it for sure! The problem is that the JVM is a deal-breaker, either because of its complexity or because of the associated licensing risk. Clojure has the same problem, for what it's worth.
Comment · 3 years ago
For a very simple, single-expression lambda function I agree you don't need an explicit return. Even Python skips the "return" for lambdas. But for anything more complex, I find explicit returns, especially early returns, makes the code much more readable for people who are used to imperative languages.

For example, which of these is more clear to people who don't know Lisp? I'd argue the second one because of the early return if guard.

    ---- THIS ----

    (defun sum-helper (items total)
        (cond
            (items
                (sum-helper
                    (cdr items)
                    (+ total (car items))))
            (t total)))

    (defun sum (&rest items)
        (sum-helper items 0))

    (print (sum 1 2 3 4))

    ----- OR -----

    (defun sum-helper2 (items total)
        (if (not items)
            (return-from sum-helper2 total))

        (sum-helper2
            (cdr items)
            (+ total (car items))))

    (defun sum2 (&rest items)
        (sum-helper2 items 0))

    (print (sum2 5 6 7 8))
Comment · 3 years ago
Let me know if you'd like to give it a shot to see how gunky it is!
Comment · 3 years ago
Thank you. I think you've basically summarized the approach! If you have any specific guidance to that end please send me an email or DM with details :)
Comment · 3 years ago
Let's keep going with the building analogy. You're running a cabinet making company. You've got all kinds of hand tools and power tools. You build jigs to make certain repetitive tasks faster. Then a ridiculously difficult design comes in for you to build. You and your crew are flummoxed by its complexity. Suddenly, someone offers you a CNC machine that you've never used before. What seemed hard is now easy. The nature of solving problems with a CNC is different. Using a CNC presents other challenges. But you have entered a new realm of what's possible. Analogies are a lot of BS but hopefully that gets across the flavor of what I'm talking about.
Comment · 3 years ago
I understand what you mean. But I expect most potential users want explicit returns because they're familiar and more approachable for beginners.
Comment · 3 years ago
I think Spark is a good example of where the functional paradigm has done well in a niche.
Comment · 3 years ago
It's SSA. If you use (define) in Racket is it no longer functional?
Comment · 3 years ago
I'm not an Elixir expert at all, but one important feature I believe is missing: explicit returns.
Comment · 3 years ago
How should an early return if statement work instead?
Comment · 3 years ago
Comment · 3 years ago
I love to swing a hammer as much as the next programmer. But if you offer me a nail gun, even with slightly lower precision, I will happily use it the majority of the time and revert to my hand tools when it's most appropriate. This is about developing force multipliers and producing leverage, not avoiding the craft.

Live from the official Hacker News API

A modern reader for Hacker News · SvelteKit + Skeleton