I'd like to share an idea that occurred to me awhile back. It's a problem one can pose prior to discussing any specific programming language.
Given two black-box functions prev(n) and next(n), along with conditional reasoning and the typical math comparison operators, define arithmetic. So for example, visualizing the translation of a segment [a, b] on a number line, we could define difference(a, b) in this way: difference(a, b): if b = 0 ---> a if b > 0 ---> difference(prev(a), prev(b)) if b < 0 ---> difference(next(a), next(b)) Or, we could make the base case: if a = b ---> 0 (if a and b are equal, then there is no difference) and get a slightly different definition. Understand that this was a pseudo-code style I was using prior to having seen Python. Imagine my joy when I then found Python! The important thing in these exercises is that we can't use our typical arithmetic operators of +, -, *, /, as we are DEFINING them! And in the act of defining them, we naturally have to think recursively, as we haven't been given any looping constructs. I must say - it was Scheme that initially inspired me to think like this. (That, and the fact that I have frequently found myself without a functional lab at the beginning of the school year! Seriously, it has been unbelievable.) I think this is a good kind of exercise for both CS and math students. And this is what made me fall in love with Python right away - the fact that I could do this kind of stuff: zero = [] def next(n): return [n] def prev(n): return n[0] one = next(zero) two = next(one) four = next(next(two)) three = prev(four) In Python, this stuff will RUN! I was ecstatic for days because of this. Of course, given this implementation we are restricted to the Naturals - but that's OK. The Naturals is a good place to start! We then have to think about how to implement other kinds of number. I think that constructing this kind of understanding is something we would want kids to do. There could be a lot of history integrated there. We can also extend the exercise to define > and <. So, given only prev(n), next(n), equality, and conditional reasoning, define arithmetic! I realize this might seem really remote and abstract for most high school students, but I actually think it's something they COULD and SHOULD grapple with. Exercises like this contain lots of good math AND CS simultaneously. I mean, consider a high school student who could articulate FROM SCRATCH their understanding of the various kinds of number in a simple computational syntax. Seems to me that would meet all kinds of concerns regarding standards. Sincerely, Michel Paul ================================================== "Shall I tell you what it is to know? To say you know when you know, and to say you do not when you do not, that is knowledge." - Confucius ================================================== _______________________________________________ Edu-sig mailing list Edu-sig@python.org http://mail.python.org/mailman/listinfo/edu-sig