[Edu-sig] ET Math (doors to alternative realities)

Kirby Urner pdx4d@teleport.com
Sun, 08 Oct 2000 14:24:27 -0700


>your thoughts most welcome
>- Jason

I agree that prefix notation (+ 1 1) vs. infix notation (1 + 1) is 
something of a curve ball for most of us.  

That's why I'd do some work to introduce it earlier, perhaps by booting 
DrScheme on a classroom projector.  "Look folks," I'd say "we all get 
used to a = 1 + 1 from our text books, but you should realize that's 
cultural, and a serious alternative, actually used in some computer 
languages, would go like this (define a (+ 1 1)).  Note that 'define', 
which plays the role of '=', is likewise a prefix -- very consistent."

This comes under the heading of "ET Math" or "Math from Mars" in my book 
-- a sort of genre I work with.  The point is to give insights into math 
by showing "what could be different, and still be of utility to an 
intelligent life form".[1]  

I do something similar with coordinate systems, showing an apparatus that 
uses 4-tuples of non-negatives to map ordinary volume (similar to XYZ 
in other words) -- a gizmo I call "the quadrays coordinate system" and 
have researched with colleagues.[2]  

Another game is to show how triangles and tetrahedra make fine models of 
2nd and 3rd powering respectively, so we could be saying "3 tetrahedroned 
= 27" instead of "3 cubed = 27".[3]  Again, we're brushing up against a 
whole other paradigm, an "ET Math" if you will.

In other words, I think this prefix vs. infix discussion presents a 
great opportunity to open a door, expand the mind.  

That being said, we don't necessarily have to go through the door 
and spend the whole semester there.  For kids encountering all this 
stuff for almost the first time, it's all pretty alien, and too 
many alternatives all at once can be too disorienting -- so I think 
we should walk a fine line.  Open a lot of doors, but don't try to go 
through them all.  Leave them for later -- you can come back to this 
stuff.

I'm thinking Python might be used to open a door to Scheme.  Instead
of the usual thing, of putting two languages side-by-side and showing
how different they are, we can modify our style of coding in Python
to make it appear more Scheme-like.  We can write recursively, for 
example, and do some functional programming kind of things.  

For example, you can define car and cdr of LISP fame:

 >>> def car(mylist):
	if len(mylist)==0: return []
	else: return mylist[0]

 >>> def cdr(mylist):
 	 if len(mylist)==0: return []
	 else: return mylist[1:]
 

Usage:

 >>> car([1,2,3,4,5])
 1
 >>> cdr([1,2,3,4,5])
 [2,3,4,5]

In Scheme:

 > (define mylist '(1 2 3 4 5))
 > (car mylist)
 1
 > (cdr mylist)
 (2 3 4 5)

Then we can do something recursive like this:

 >>> from operator import *

 >>> def Reduce(operator,mylist):	
       if len(mylist)==1:  return car(mylist)
       else: return apply(operator, (car(mylist), Reduce(operator,
cdr(mylist))) )

 >>> Reduce(add,[1,2,3,4,5])   # = (+ 1 (+ 2 (+ 3 (+ 4 5))))
 15
 >>> Reduce(mul,[1,2,3,4,5])   + = (* 1 (* 2 (* 3 (* 4 5))))
 120

Note that I've named this Reduce, not reduce, which is a built-in, and 
gives the same results:

 >>> reduce(add,[1,2,3,4,5])
 15
 >>> reduce(mul,[1,2,3,4,5])
 120

Although Scheme purists might have little patience for such stuff, I think 
this helps communicate some of the flavor of Scheme to those more familiar 
with Python.

In sum, even if going with Python as a first language, I'd open a door
to Scheme via introducing prefix notation, and would lay some groundwork
in Python (as per the above example) for latter tackling Scheme and 
similar languages.

Kirby

[1] more re "ET Math": http://www.teleport.com/~pdx4d/amtepost2.html

[2] http://www.teleport.com/~pdx4d/quadintro.html 
    (links to Python implementation in 'For further reading')

[3] http://www.rwgrayprojects.com/synergetics/s09/figs/f9001.html