Lambda the Ultimate

inactiveTopic Scheme & Macros
started 6/3/2002; 8:53:12 PM - last post 6/4/2002; 5:34:35 AM
Ed Heil - Scheme & Macros  blueArrow
6/3/2002; 8:53:12 PM (reads: 241, responses: 1)
I'm getting suckered into Paul Graham's hype and getting all geeked about learning Lisp. I'm quite a beginner, and find Scheme very attractive but occasionally I run into something like this --

"...one can argue that it is impossible to ever have a good macro system for Scheme."

from:

http://dept-info.labri.u-bordeaux.fr/~strandh/Teaching/MTP/Common/Strandh-Tutorial/diff-scheme.html

I'm not far enough along in my reading of things like _Successful Lisp_ or _On Lisp_, nor do I grasp Scheme macros well enough, to evaluate statements like that. So I thought I'd ask for opinions.

Are Lisp macros really all that? Are Scheme macros really not? Am I wasting my time focusing on Scheme and missing out on that macro-y goodness?

Thanks,

Ed

andrew cooke - Re: Scheme & Macros  blueArrow
6/4/2002; 5:34:35 AM (reads: 261, responses: 0)
The point is a pedantic, not a practical one (as far as I can tell) - that there´s no *formal* requirement for Scheme code to be represented as lists. But since that´s the blindingly obvious way to represent Scheme source, in practice it's not a problem.

In fact, Common Lisp macros are defined in a way that means they are susceptible to certain errors. In contrast, if you use a Scheme with "hygienic macros", you avoid this problem (of course, you can just follow the guidance in On Lisp and you shouldn't have problems with Common Lisp either).

The big difference between the two languages is the size/definition issue. If you want a well defined and comprehensive language, use Common Lisp. If you want a simpler language that people are extending in different and interesting ways, and are able to pick an implementation to suit your specific requirements, use Scheme.

That page is somewhat biased towards Common Lisp - in particular, it´s odd to give more weight to the pedantic issue about defining code representation than the practical issue of tail call optimisation.