> Well, it _was_ broken for -- all of 362 minutes, and fixed thanks to > a good Lisp user who informed me about the problem in a way that
Are the Evil Lisp users the ones who have been replaced by space aliens? The ones you will have to kill Come The Day? They're here, Erik, it's starting!
> Languages shape the way we think.
I didn't realise you were a Klingon speaker.
> And assuming it's a _backup_ address...
Erik, I'm sorry. Please tell me how to describe that address. I promise I won't use the word "backup" about your email again ouside of description of its content.
- Rob.
-- r...@h2g2.com - Rob Myers - http://www.robmyers.org/ "Don't talk to sociologists. Social practice has no sociological content." - Art & Language.
* "Michael T. Richter" <m...@igs.net> | <tone style="sarcasm"> | A very cogent rebuttal. I have now seen the error of my ways. You | are a truly fiendish disputante for you have undone an opinion based | upon years of effort with a simple, two-syllable word. | </tone>
Let's _quote_ from some of Michael T. Richter's eloquence on display for all the world to see (well, that part of the world which thinks Dylan is all the world, anyway):
In <6Qi85.18115$ZI2.545...@news1.rdc1.on.wave.home.com>, Michael T. Richter <m...@ottawa.com>, presumably the same _gentleman_, writes:
"Hey fuckhead"
Granted, it's two words and three syllables, which could imply that Michael T. Richter is anywhere between 50% and 100% more cogent than Dave Bakhash's "bogus", but since the first word is but a noise word to get attention, it isn't worth anything at all, which means we're dealing with a neanderthal who is very envious of humans. Worse, yet, "bogus" is _way_ more cogent than "fuckhead", but then again, Dave is a Lisp user and Michael is a Dylan user, and we know what kind of people _they_ are: ...
| Yes, Lisp has its advantages. Readability isn't one of them.
... hostile, illiterate bums who hate their parens, as this new evidence of eloquence and cogency shows so clearly.
#:Erik -- If this is not what you expected, please alter your expectations.
* Rob Myers <r...@h2g2.com> | Are the Evil Lisp users the ones who have been replaced by space | aliens? The ones you will have to kill Come The Day? They're here, | Erik, it's starting!
Please leave me out of your insanity, Rob. Please ask your doctor to reconsider the suggestion to use USENET for therapeutic purposes. You just be calm, now. You _don't_ need to hurt yourself, OK? You can get through this stressful period safely. Just take your anti- psychotic medication and try to stay away from challenges to your beliefs, and this will all be over in a couple days, OK? If you try and avoid responding to me, you'll soon feel much better, too.
#:Erik -- If this is not what you expected, please alter your expectations.
In article <WJn85.1486$8Q5.17...@news22.bellglobal.com>, "Michael T. Richter" <m...@ottawa.com> wrote:
> for (i = 0.0; i < 1.0; i++) > { > print(i); > }
That syntax is actually not as good as you think. You of course carefully removed any bugs from it to show it in a positive light, but in spite of your best efforts, it doesn't increment the iterator correctly, and is therefore not equivalent to the code you were trying to compare it with.
> ...(and remembering that I'm trying to escape the C-influenced world, so > don't make the usual error of assuming I'm a C apologist) I have the > following information provided for free without any need for picking apart > the code: > - I'm entering an enumerated, top-test loop. ("for") > - There is assignment to a variable. ("=") > - There is an in-place increment of a variable. ("++") > - There is a code block. ("{}") > - There is a function invocation. ("()")
I forget. What do the `;' mean? Do they always mean the same thing everywhere, or do they mean different things in different places? I also don't understand the function invocation: is FOR being invoked on 7 arguments (i, =, 0.0;, i, <, 1.0;, i++)? Or do parenthesis mean different things in different places, too?
Or perhaps it is the case that the keyword FOR has its own syntax that is similar to the syntax of the rest of the code. In which case an experienced user knows what to expect in a FOR statement. How does this differ from the lisp version of FOR?
* Rob Myers <r...@h2g2.com> | And I repeat: didn't you have something to say about people who make | sweeping generalizations?
I'm so glad you asked. Yes, of course, but I'm trying to learn about the Dylan ways by studying such fine gentlemen as yourself. Remember, languages shape the way we think, so in order to think like a Dylanite or whatever your neanderthal race is called, I must study how you perform in the big challenge that is life. For Dylan users, specifically, random, unchecked assumption are perfectly OK, sweeping generalizations even better, and so naturally one has to deal with neanderthals such as your community on your own premises.
You _surely_ can't mean that when a number of Dylanites prove to the world that when they make sweeping generalizations about others, and the _others_ object, they have _not_ communicated clearly that it is OK to apply sweeping generalizations to _themselves_? I don't think very highly of the Dylan community, but the sheer inability to grasp that when you do something to others out of moral righteousness, it most certainly must be OK to apply it back to yourself is too much -- even I don't think _that_ badly of neanderthals morons. And lest you object -- _you_ have most certainly proven beyond _any_ doubt that there's one law for you (Dylanites) and one law for everyone else, so I'm just trying to do the smallest things to accomodate you Dylanites. Out of courtesy, you know -- _your_ kind of courtesy.
#:Erik -- If this is not what you expected, please alter your expectations.
> The point is that cramming a half-dozen completely different sets of > semantics into one syntax makes the resulting code hard for human readers. > Having the code illustrate through visual cues that you're dealing with > something which is semantically different aids human readers.
I'd disagree that you get a half-dozen sets of semantics. At a stretch, I'd identify two -- function call, and macro invocation. But that's a minor detail.
> Using the equivalent C "for" construct...
> for (i = 0.0; i < 1.0; i++) > { > print(i); > }
> ...(and remembering that I'm trying to escape the C-influenced world, so > don't make the usual error of assuming I'm a C apologist) I have the > following information provided for free without any need for picking apart > the code: > - I'm entering an enumerated, top-test loop. ("for")
Sure. The first word tells you what's going on.
> - There is assignment to a variable. ("=")
Just like this almost identical one for C9x or C++, I take it?
for (double i = 0.0; i < 1.0; i += 0.1) { print(i); }
Except that in this case, the "=" means `initialize', not `assign', and it turns out that they're different. If you're trying to argue that it's better to have visually distinctive syntax for operations with different semantics, then C is certainly not the right language to hold up as an example -- even if you're not trying to be an apologist for C.
> - There is an in-place increment of a variable. ("++")
(You actually wanted "i += 0.1" to get the same meaning as David's loop, but I'll assume that's an oversight.)
Are you really concerned that there's an in-place increment of a variable, or merely that the value of the variable increases over time? If the latter, then I would claim that having to specify "in-place increment" merely clutters the code without adding anything of interest.
> - There is a code block. ("{}")
Of course there's a code block -- it's a loop. This seems a somewhat specious means of increasing your count of differing semantics. I'd also be inclined to suggest that the visual cue for "code block" is not the brace pair, but the additional indentation. Lisp does the same thing: you read not the parentheses, but the indentation. (And in my opinion, Lisp has two significant advantages here. Firstly, the conventions that have arisen for indenting Lisp are much closer to universal than any of the competing conventions for languages like C. Secondly, the highly regular nature of Lisp syntax makes it pretty trivial to perform this sort of indentation automatically.)
> - There is a function invocation. ("()")
It's unclear to me why you think that visually marking function invocation is a particularly good idea. Surely the majority of all code is function invocations? This certainly applies to Lisp. For C, the argument against this idea is that the infix operators aren't functions; but C++ abandons the distinction.
> Your code tells me that I'm entering an enumerated, top-test loop for free. > After that I have to parse what's there to get the semantics.
So write your FOR macro differently. When I was young(er) and (more) foolish, I wrote a FOR macro that allowed syntax like this (among a too-wide variety of other styles):
(for (0 <= i < 1 :step 1/10) (print i))
(All sensible combinations of <, <=, >, >= are permitted, and the :step part is optional.) I actually really like this syntax; I find that it describes what is going on far more clearly than any other syntax I've seen.
Alternatively, you could use the standard LOOP macro:
(loop for i from 0 to 9/10 by 1/10 do (print (float i)))
Seems entirely readable to me. (As an aside, note that this version does actually give you the desired answer; using floating-point arithmetic is probably a pretty bad idea here.)
To return to your initial point that visual cues are useful, and that Lisp syntax provides fewer such cues than many other languages: I don't deny either the utility of visual cues, or the fact that some Lisp forms may overuse nested parentheses (DO being an example). But Lisp's approach to syntax, in which you can use macros and reader macros to alter what the programmer sees, enables you to construct syntax that is convenient for what you're doing. Regarding DO in particular, my experience is that many if not most uses of this form are actually hidden away in macros that relate to some abstraction. Though they needn't be implemented in terms of DO, the CL macros DOLIST, DOTIMES, DO-SYMBOLS are good examples of what I mean.
-- Aaron Crane <aaron.cr...@pobox.com> <URL:http://pobox.com/~aaronc/> ** Please send on-topic followups by Usenet, not email **
* Aaron Crane wrote: > I'd disagree that you get a half-dozen sets of semantics. At a stretch, I'd > identify two -- function call, and macro invocation. But that's a minor > detail.
Joe Marshall <jmarsh...@alum.mit.edu> writes: > "Michael T. Richter" <m...@igs.net> writes:
> > Using the equivalent C "for" construct...
> > for (i = 0.0; i < 1.0; i++) > > { > > print(i); > > }
> > ...(and remembering that I'm trying to escape the C-influenced world, so > > don't make the usual error of assuming I'm a C apologist) I have the > > following information provided for free without any need for picking apart > > the code: > > - I'm entering an enumerated, top-test loop. ("for") > > - There is assignment to a variable. ("=") > > - There is an in-place increment of a variable. ("++") > > - There is a code block. ("{}") > > - There is a function invocation. ("()")
> I forget. What do the `;' mean? Do they always mean the same thing > everywhere, or do they mean different things in different places? I > also don't understand the function invocation: is FOR being invoked > on 7 arguments (i, =, 0.0;, i, <, 1.0;, i++)? Or do parenthesis mean > different things in different places, too?
> Or perhaps it is the case that the keyword FOR has its own syntax that > is similar to the syntax of the rest of the code. In which case an > experienced user knows what to expect in a FOR statement. How does > this differ from the lisp version of FOR?
thanks, joe. I could never have said it better. As I recall, {}'s can mean enums, code blocks, etc. etc. There's definately lots of that in C and its friends.
Also, a word on "bogus". I use that word as a rather light-hearted word. I didn't mean to offend or denigrate anyone's opinions or justifications; I mearly was expressing a *difference* of opinion, where something that was an opinion seemed to be stated as if it were fact. It seemed to me as if the poster was implying that it's a bad thing that in CL you could define macros, and that they generally obfuscate the language. Well, no one says you have to write macros, unless you're working alone, working on a Lisp project won't be too fun for you.
> > But, if you really love C's `for' then just implement it in > > Common Lisp. It shouldn't be too hard to have something that > > looks almost exactly like `for' (maybe a bit lispy, but hey, > > it's lisp).
> > (for ((i 0.0) (< i 1.0) (+ i 0.1)) > > (print i)) .. > But a thought based upon missing the point entirely. The point is that > cramming a half-dozen completely different sets of semantics into one syntax > makes the resulting code hard for human readers. Having the code illustrate > through visual cues that you're dealing with something which is semantically > different aids human readers.
> Using the equivalent C "for" construct...
> for (i = 0.0; i < 1.0; i++) > { > print(i); > }
[SNIP: Michael explains why he prefers "for"]
For readability by inexperienced humans, I don't think either of these approaches comes close to
(loop for i from 0 by 0.1 below 1.0 do (print i))
Some Lispers detest LOOP. I'm glad it's there, because it's a great tool for expressing simple iterations simply. (Most iterations are simple. Hairy ones are tricky to understand whatever language you express them in.)
For slightly more complicated iterations, compare C's
for (p=items; p; p=p->next) { do_something(p); }
with Lisp's
(loop for item in items do (do-something p))
No comparison, I reckon.
Note that the Lisp versions also isolate the binding of the loop variable to within the loop, which is usually what you want. Doing that in C requires more braces and an extra declaration.
Now, I know you're not primarily defending C. But if the issue is the readability of C's iteration constructs versus that of Lisp's, I think it's a one-way contest, and not in the direction you're suggesting.
Some bits of C's syntax *are* much easier for the non-immersed to grasp. For instance, I think assignments and arithmetic are clearer in C than in Lisp, unless you have a little reader macro that lets you write
{ x = (5 * y + 7) / (y + 3) }
(which isn't hard; there are such things out there and in the public domain). On the other hand, I find that I never use them; one gets used to the syntax of Lisp.
-- Gareth McCaughan Gareth.McCaug...@pobox.com sig under construction
gj...@g.local (Gareth McCaughan) writes: > Some Lispers detest LOOP. I'm glad it's there, because it's > a great tool for expressing simple iterations simply. (Most > iterations are simple. Hairy ones are tricky to understand > whatever language you express them in.)
I detest LOOP. The whole point of Lisp IMO is the parens and the prefix notation. Why screw that up with some weird English-like thingie that just looks _wrong_? As to simple and complex iterations, I don't find using MAPCAR or DOLIST or just plain DO to be hard to understand. I just spend 5 minutes reading the manual _before_ I try something for the first time.
> Note that the Lisp versions also isolate the binding of the > loop variable to within the loop, which is usually what you > want. Doing that in C requires more braces and an extra > declaration.
Java (and C++ IIRC) let you do this:
for (int i = 0; i < MAX_SIZE; i++) do_something_with(i);
i is only within the scope of that loop.
-- vsync http://quadium.net/ - last updated Fri Jun 30 22:55:16 MDT 2000 (cons (cons (car (cons 'c 'r)) (cdr (cons 'a 'o))) ; Orjner (cons (cons (car (cons 'n 'c)) (cdr (cons nil 's))) nil)))
vsync wrote: > I detest LOOP. The whole point of Lisp IMO is the parens and the > prefix notation. Why screw that up with some weird English-like > thingie that just looks _wrong_?
Because the result is often easier to understand that the equivalent code without LOOP.
But then I grew up on Interlisp, so maybe it's a cultural thing.
> > I detest LOOP. The whole point of Lisp IMO is the parens and the > > prefix notation. Why screw that up with some weird English-like > > thingie that just looks _wrong_?
> Because the result is often easier to understand > that the equivalent code without LOOP.
> But then I grew up on Interlisp, so maybe it's > a cultural thing.
I think that's true. I learned Lisp from Paul Graham's _ANSI Common Lisp_, and he smacks LOOP down pretty hard. I think I would have disliked it anyway, though, as my preference is to do things in the way most fitting to the language. LOOP just doesn't seem very "Lispy" to me.
But it's great that the different facilities are there. It's not just in Perl that "there's more than one way to do things". =)
-- vsync http://quadium.net/ - last updated Fri Jun 30 22:55:16 MDT 2000 (cons (cons (car (cons 'c 'r)) (cdr (cons 'a 'o))) ; Orjner (cons (cons (car (cons 'n 'c)) (cdr (cons nil 's))) nil)))
> > Some Lispers detest LOOP. I'm glad it's there, because it's > > a great tool for expressing simple iterations simply. (Most > > iterations are simple. Hairy ones are tricky to understand > > whatever language you express them in.)
> I detest LOOP. The whole point of Lisp IMO is the parens and the > prefix notation. Why screw that up with some weird English-like > thingie that just looks _wrong_? As to simple and complex iterations, > I don't find using MAPCAR or DOLIST or just plain DO to be hard to > understand. I just spend 5 minutes reading the manual _before_ I try > something for the first time.
No, the whole point of Lisp is that things such as LOOP can be created at all, within the language itself. Otherwise we wouldn't be having this discussion.
In article <oLi85.18114$ZI2.543...@news1.rdc1.on.wave.home.com>, "Michael T. Richter" <m...@ottawa.com> writes:
>>> That's the first time I've seen someone describe a profusion of >>> parentheses as "clean".
>> lisp only looks longwinded and confusing on the surface.
> If something looks confusing, it likely is.
everything looks confusing to the uninitiated. mathematical notation is an excellent example, but after having learned a little bit about it, most people prefer it over the alternatives. imo the same applies to lisp
> ... >> imho the simple syntax of lisp is a *huge* advantage for lisp.
> If unreadability is supposed to be an advantage, I guess I'm all for it.
David Bakhash <ca...@alum.mit.edu> writes: > ...Well, no one says you have to write macros, unless you're working > alone, working on a Lisp project won't be too fun for you.
I was in a rush. What I meant by that was that as a CL programmer, you don't _have_ to use macros, but that if you're working in a group of more more than one person, then you're gonna have a hard time, since so many people _do_ use macros in Lisp.
The real point, though, was that macros, properly used, are supposed to clarify code on the whole, make it more readable, and easier to write. The WITH-OPEN-FILE example from another thread illustrates this nicely.
gj...@g.local (Gareth McCaughan) writes: > Michael T. Richter wrote:
> [David Bakhash:] > > > But, if you really love C's `for' then just implement it in > > > Common Lisp. It shouldn't be too hard to have something that > > > looks almost exactly like `for' (maybe a bit lispy, but hey, > > > it's lisp).
> > > (for ((i 0.0) (< i 1.0) (+ i 0.1)) > > > (print i)) > .. > > But a thought based upon missing the point entirely. The point is that > > cramming a half-dozen completely different sets of semantics into one syntax > > makes the resulting code hard for human readers. Having the code illustrate > > through visual cues that you're dealing with something which is semantically > > different aids human readers.
> > Using the equivalent C "for" construct...
> > for (i = 0.0; i < 1.0; i++) > > { > > print(i); > > } > [SNIP: Michael explains why he prefers "for"]
> For readability by inexperienced humans, I don't think either > of these approaches comes close to
> (loop for i from 0 by 0.1 below 1.0 do > (print i))
this goes without say, and LOOP is _exactly_ how most people would do this example.
> Some Lispers detest LOOP.
This will likely change over time.
One thing I must say about the readability, or unreadability of Lisp code is that when you're diving into other people's heavy macrologies, things can often get very difficult to read, and know what's going on. If it all works, then it's usually okay. But when you're debugging other people's code, one often depends on macroexpansion to see what's going on. If macros are written correctly, well documented, and maybe even show an example or two of usage, then what is to some a burden can easily become a friendly tool.
>> [David Bakhash:] >> > > But, if you really love C's `for' then just implement it in >> > > Common Lisp. It shouldn't be too hard to have something that >> > > looks almost exactly like `for' (maybe a bit lispy, but hey, >> > > it's lisp).
>> > > (for ((i 0.0) (< i 1.0) (+ i 0.1)) >> > > (print i)) >> .. >> > But a thought based upon missing the point entirely. The point is that >> > cramming a half-dozen completely different sets of semantics into one syntax >> > makes the resulting code hard for human readers. Having the code illustrate >> > through visual cues that you're dealing with something which is semantically >> > different aids human readers.
>> > Using the equivalent C "for" construct...
>> > for (i = 0.0; i < 1.0; i++) >> > { >> > print(i); >> > } >> [SNIP: Michael explains why he prefers "for"]
>> For readability by inexperienced humans, I don't think either >> of these approaches comes close to
>> (loop for i from 0 by 0.1 below 1.0 do >> (print i))
>this goes without say, and LOOP is _exactly_ how most people would do >this example.
The only thing worse than LOOP is the set of alternatives to LOOP.
The C "for" construct is _used as_ a looping construct; it is rather better compared to DO, whether we're talking the Common Lisp DO, or the Scheme DO.
In either case, DO, just like C's "for," represents a primitive control structure that doesn't really structure things very strongly. You can do virtually anything in the clauses, as opposed to the way that LOOP supplies both name bindings _as well as control over what they do_.
C provides neither bindings nor control; you need to pre-declare your variables, and manually set up the clauses to do "the right things."
DO provides bindings, but no control. You have to manually set up the clauses to do "the right things," namely initializing, incrementing, and comparing.
In contrast, (loop for i from 0 by 0.1 below 1.0 do (print i)) shows that LOOP is supporting all three of these things: -> It creates a binding for "i" -> It supplies the code to increment and test i, based on a _description_ of what is to be done to i.
>> Some Lispers detest LOOP.
>This will likely change over time.
I don't much like LOOP, but find that the alternatives are largely _worse_.
There are two _major_ cases: a) If you're doing a relatively simple loop, LOOP is pretty nice.
b) If you're doing a _really complex_ loop, LOOP is pretty nasty, but so are the alternatives.
It might be a Nice Thing to revisit LOOP, and make up a "cleaner" design. An ambitious person might want to show us what a "better LOOP" might look like with a sample implementation.
>One thing I must say about the readability, or unreadability of Lisp >code is that when you're diving into other people's heavy macrologies, >things can often get very difficult to read, and know what's going on. >If it all works, then it's usually okay. But when you're debugging >other people's code, one often depends on macroexpansion to see what's >going on. If macros are written correctly, well documented, and maybe >even show an example or two of usage, then what is to some a burden can >easily become a friendly tool.
Herein lies the _other_ merit of LOOP that exists whether you use it or not; it provides an example of a sophisticated language embedded in Common Lisp using macros.
Other languages have nothing of comparable nature, AT ALL. -- aa...@freenet.carleton.ca - <http://www.ntlug.org/~cbbrowne/lisp.html> "[In 'Doctor' mode], I spent a good ten minutes telling Emacs what I thought of it. (The response was, 'Perhaps you could try to be less abusive.')" -- Matt Welsh
> From: Erik Naggum <e...@naggum.net> > Subject: Re: C# is not Dylan (was: Re: C# : The new language from M$)
> Please leave me out of your insanity, Rob.
It's insane to deny the existence of space aliens? You're further gone than I thought! Come on, say it: "The people around Erik have not been replaced by alien pods. Erik does not have to kill them Come The Day." .
> Please ask your doctor > to reconsider the suggestion to use USENET for therapeutic purposes. > You just be calm, now. You _don't_ need to hurt yourself, OK? You > can get through this stressful period safely. Just take your anti- > psychotic medication and try to stay away from challenges to your > beliefs, and this will all be over in a couple days, OK? If you try > and avoid responding to me, you'll soon feel much better, too.
Well, with that stunning, if unintentional, piece of self-description on your part, my work here is done.
All that's left is for you to prove me right about you having to have the last word again, and you can go back to being the list Village Idiot.
>* "Janos Blazi" <jbl...@vipsurf.de> >| Well, wjen I started learning Lisp last year I thought than the >| parentheses will become a nightmare but now I see that this is not the >| case. But there is one example when I still think that infix syntax >| would be preferable: In long mathematical formulae: >| >| (/ (+ (- b) (sqrt (- (* b b) (* 4 (* a c))))) (* 2 a)) >| >| ot something like that (I have not checked if the formula is correct) >| still looks messy and I wonder if practicing would help. I can see >| immediately if the infix form is correct, though.
> Hardcore Lispers know that the syntax of Common Lisp is programmable > and act accordingly. Infix has its merit for very simple arithmetic > and if that is done often enough to be usefully modified, one simply > adds a little convenience to the language. I prefer to use { and } > to bracket infix expressions:
>{ (sqrt(b * b - 4 * a * c) - b) / (2 * a)) }
> However, note that (* 4 (* a c)) is better written (* 4 a c). Few > infix-oriented people get beyond two-argument arithmetic functions, > but all arithmetic functions take many arguments, and redundancy in > form is A better approach > to the above would thus be
>(/ (- (sqrt (- (* b b) (* 4 a c))) b) 2 a)
> But note how little infix syntax buys you in this case.
>[ The sore freaks in comp.lang.dylan don't need to be reminded that > their language doesn't have a programmable syntax, so followups are > redirected away from the pathetic loser camp. ]
>#:Erik
I agree and would like to add that the argument only holds for "long mathematical formulae having only two argument operators that are predefined in the language". Otherwise you have to write your operators as prefix function application or start messing about with infix declarations which may have unknown interactions with other code you are using.
The simple, uniform way in which these mathematical expressions are written makes them easy to generate or analyze for various mathematical purposes such as reduction, simplification, optimization etc. Not having to bother with writing a parser is a timesaver and a parser/pretty-printer can always be added after the interesting part is finished. Immanuel
> > Because the result is often easier to understand that the equivalent > > code without LOOP.
> > But then I grew up on Interlisp, so maybe it's a cultural thing.
> I think that's true. I learned Lisp from Paul Graham's _ANSI Common Lisp_, > and he smacks LOOP down pretty hard. I think I would have disliked it > anyway, though, as my preference is to do things in the way most fitting > to the language. LOOP just doesn't seem very "Lispy" to me.
I become familiar with CL via the same book. IIRC Graham makes the point that writing "languages" within CL is a common thing to do, perhaps even a "Lispy" thing to do. Given that I've always thought that LOOP was *very* "Lispy".
-- Take a look in Hagbard's World: | boxquote.el - "Boxed" text quoting. http://www.hagbard.demon.co.uk/ | sawfish.el - Sawfish mode. http://www.acemake.com/hagbard/ | uptimes.el - Record emacs uptimes. emacs software, including.......| quickurl.el - Recall lists of URLs.
David Bakhash <ca...@alum.mit.edu> writes: > The real point, though, was that macros, properly used, are supposed to > clarify code on the whole, make it more readable, and easier to write. > The WITH-OPEN-FILE example from another thread illustrates this nicely.
There's kind of a trade off though, isn't there? The top-level code gets more readable, surely, but when you have to debug something deep in a pile of macros, it can get really nasty and brain-twisting.
Macros need to be *very* carefully tested and debugged before you build anything on top of them, in my opinion.