Newsgroups: comp.lang.scheme
Path: utzoo!utgpu!news-server.csri.toronto.edu!rpi!think.com!mintaka!bloom-beacon!dont-send-mail-to-path-lines
From: bh@anarres.berkeley.EDU (Brian Harvey)
Subject: EdScheme
Message-ID: <9106041329.AA02962@anarres.Berkeley.EDU>
Sender: daemon@athena.mit.edu (Mr Background)
Organization: The Internet
Date: 4 Jun 91 13:29:26 GMT
Lines: 61

The people who wrote EdScheme (assuming we're talking about the same
thing--this one is from Florida) also wrote a book, _The_Schemer's_Guide_,
meant to introduce Scheme in precollege education.  I reviewed the book
for a potential publisher and reviewed the software along with it.  Here
is what I said to them about EdScheme:


Good points:

	* printable environments (avoiding circularity problems)
	  and therefore printable procedures.  This is great!  It's
	  a big help in debugging as well as in explaining things.
	  This is my favorite EdScheme feature.

	* Turtle graphics.  This should make the language more fun
	  and more accessible to visual thinkers.

Bad points:

	* Incompatibility with R3RS (the Scheme standard document).
	  Despite the new compatibility mode, many issues are not
	  addressed.  Among these:

		+ lower and upper case distinguished in symbols
		+ delay doesn't memoize
		+ many missing essential procedures:
			eqv? append memq assq max min complex? (and other
			numeric type predicates; note that these are
			required even if the types are not supported)
			abs char? string-length procedure? map
			cadr (and cddr and friends)
		    (maybe more; I didn't try everything)
		+ NOT doesn't accept non-#t/#f args
		+ COND doesn't accept one-expression clauses
			(COND (3)) should return 3
		+ (lambda (a b . args) body) syntax

	* Incompatibility with Abelson and Sussman terminology.
	  Although the standard doesn't say one way or the other,
	  A&S want (atom? '()) to be true, not false.  Also, it would
	  simplify life if () and #f were the same thing, which is
	  permitted by the standard.  That's controversial, though.

Things I have mixed feelings about:

	* The red/black stuff.  [Things that are meant to represent
	  executable process are in black; "data" are in red.]
	  This provides, somewhat artificially,
	  a way to talk about things like the evaluation of numbers and
	  quote forms, and that's good.  But the cost is that it hides
	  a key idea, the fact that programs ARE just data.  This gets
	  awkward when the text ends up saying "Scheme blackens the red
	  FD" and things like that.  In practice, 99% of the time, all
	  that happens is that the user types in black and Scheme types
	  in red, and I bet many students don't understand the colors
	  any more deeply than that.

	* The fact that procedures are not a separate type.  I think it's
	  great that procedures are PRINTABLE like lists, but really they
	  should be atomic (that is, (ATOM? FIRST) should be true), and
	  you shouldn't be able to modify them with set-car! and so on.
