[Haskell-beginners] Is "step by step" the most natural style of
thought?
Michael Mossey
mpm at alumni.caltech.edu
Tue Oct 20 04:52:31 EDT 2009
Daniel Fischer wrote:
> Am Dienstag 20 Oktober 2009 04:48:50 schrieb Michael Mossey:
>>
>> Eliminating variables and working with function combinations has benefits.
>
> But it's not unconditionally a good thing. If you exaggerate it, it's pure obfuscation.
> Nevertheless, playing around with eliminating variables and using combinators
> even beyond the border of obfuscation is a good exercise.
> You gain understanding and a feeling of when it's better to stop by that.
>
I think I understand.
Another way to put my point is that learning Haskell has trained my eye to
notice when a particular variable is flopping around in six different
places. I programmed for twenty years or more in imperative languages (in a
business setting, not academia) and no one ever said, "Hey we've got too
many repetitions of x! Let's see what the underlying abstraction REALLY is."
>> The one suggestion I've seen here that seems to be right on the money is
>>
>> liftM2 (&&) (< 0.5) (> -0.5)
>
> May I offer
>
> (&&) <$> (< 0.5) <*> (> -0.5)
>
> ? It works on Applicative Functors (doesn't need the full force of Monads).
>
>> Although that might seem less clear to a beginner, it is actually _more_
>> clear than the lambda function in some ways. It's easier to work with proof
>> at a more abstract level like this, and strange as it may seem, what I seem
>> to observe in expert users of Haskell is that their brains will pick up
>> what this is doing faster than the lambda function.
>
> In this small example, both are immediately clear, you need more complicated lambda
> expressions to get a measurable difference :)
Yeah, pretty small example, but based on what I've read in "Real World
Haskell" and "Craft of Functional Programming," the authors find a lot of
"strange-looking" (to the imperative programmer's eye) function combinators
to be the most natural way of expressing the solution, and from time to
time I find my thoughts aligning with them, and I realize how much less
thought it takes.
This raises the question: is "step by step" thinking the "most natural" way
to think about a mathematical problem? My hunch is "no." There are multiple
modes of thought, and no reason to eliminate cognitive models that involve
imagery, imaginary things moving and sliding through space... or analogies
to the more common physical world... or the list is endless. I like the way
Haskell resonates with a larger set of thinking styles.
Mike
More information about the Beginners
mailing list