12 comments

[ 3.1 ms ] story [ 35.5 ms ] thread
Absolutely interesting. I'd change the title from "IPython from Peter Norvig" to "IPython Notebooks by Peter Norvig", though.
In the linked notebook http://nbviewer.jupyter.org/url/norvig.com/ipython/Countdown... when he says

>because there are 2 ways to make 27 with the numbers (10, 9, 8), namely, ((10+9)+8) and (10+(9+8))

why not also (10+9+8)?

+ is an associative binary operator. You have to decide which pair to add first.
To add on, I think he's writing from a Lisp perspective, not general math notation.
Thank you both, that makes sense.
That doesn't matter. It's just the basic associative property of addition in arithmetic. As such, it's present in all programming languages.
But in normal math it's easy to use n-ary addition.
Nowadays math mostly ends up in a CPU crunching two inputs at a time.

If you don't write it so explicitly, a compiler will do it for you anyway.

In Lisp too -- arguably easier than in most languages. To add 10+9+8 in Lisp you write (+ 10 9 8), a single 3-ary call to +. In, say, C you write 10+9+8 and the parser turns that into two 2-ary additions.

(Of course, in either language you end up with two 2-operand ADD instructions in the object code. Nothing has hardware for arbitrary n-ary adds!)

Think about when you evaluate the expression (10+9+8). You will either add 10+9 or 9+8 first and add 19 to 8 or 17 to 8. (10+9+8) is ambiguous because it can be parsed both ways.
When something like this happens: when the author of one of my favorite computer science text books releases an interactive notebook my main sensation is one of envy.

I really envy all the students who get to study Norvig like this.

Also, you'll probably have access to better health care.