From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Alan Mackenzie Newsgroups: gmane.emacs.help Subject: Re: Is it possible for a macro to expand to nothing? Date: Thu, 26 Nov 2009 06:53:15 +0000 (UTC) Organization: muc.de e.V. Message-ID: References: <87ljhwb2dx.fsf@galatea.local> NNTP-Posting-Host: lo.gmane.org X-Trace: ger.gmane.org 1259221434 19437 80.91.229.12 (26 Nov 2009 07:43:54 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 26 Nov 2009 07:43:54 +0000 (UTC) To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Thu Nov 26 08:43:48 2009 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1NDZ10-0006Va-2K for geh-help-gnu-emacs@m.gmane.org; Thu, 26 Nov 2009 08:43:46 +0100 Original-Received: from localhost ([127.0.0.1]:43926 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NDZ0z-0003Ud-9l for geh-help-gnu-emacs@m.gmane.org; Thu, 26 Nov 2009 02:43:45 -0500 Original-Path: news.stanford.edu!usenet.stanford.edu!news.tele.dk!news.tele.dk!small.news.tele.dk!newsfeed.xs4all.nl!newsfeed6.news.xs4all.nl!xs4all!news2.euro.net!newsfeed.freenet.de!news.tu-darmstadt.de!news.muc.de!not-for-mail Original-Newsgroups: gnu.emacs.help Original-Lines: 59 Original-NNTP-Posting-Host: marvin.muc.de Original-X-Trace: colin2.muc.de 1259218395 12510 2001:608:1000::2 (26 Nov 2009 06:53:15 GMT) Original-X-Complaints-To: news-admin@muc.de Original-NNTP-Posting-Date: Thu, 26 Nov 2009 06:53:15 +0000 (UTC) User-Agent: tin/1.6.2-20030910 ("Pabbay") (UNIX) (FreeBSD/4.11-RELEASE (i386)) Original-Xref: news.stanford.edu gnu.emacs.help:175065 X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.help:70134 Archived-At: Jeff Clough wrote: > From: Alan Mackenzie > Date: Tue, 24 Nov 2009 16:39:20 +0000 (UTC) >>> It comes directly from the definition of defmacro, >>> defmacro is a special form in `src/eval.c'. >>> (defmacro name arglist [docstring] [decl] body...) >>> Define name as a macro. The actual definition looks like >>> (macro lambda arglist [docstring] [decl] body...). >>> When the macro is called, as in (name ARGS...), the function >>> (lambda arglist body...) is applied to the list ARGS... as it >>> appears in the expression, and the result should be a form to be >>> evaluated instead of the original. >> Oh, come on! That last sentence is a tutorial, motivating one, >> expressed in the slightly loose, colloquial language of the hacker. >> "a form to be evaluated" is here shorthand for something like "some >> sort of atom or list structure which fits into the slot where the >> invocation is housed" > This is incorrect. The term "form" has a very specific definition in > Lisp. It is a sexp that can be evaluated. While I'm new to Lisp, I > have been knee deep in books and documents for the last couple of weeks > and everything (including the GNU Emacs Lisp Manual) presents macros as > a way to generate *forms*, not just sexps. You've missed my point. The guy who wrote that definition of macro was, in using the word "form", being somewhat, er, informal. It was just easier and more concise to say "form" than "form or (sometimes) other appropriate list structure". > If you have a macro that expands to (1 2 3), it's not going to break > the world, but that macro isn't doing what every hacker is going to > expect. I'd call that a style problem. Just like somebody occasionally using a goto in C. Pascal was unable to identify any specific problem a non-form macro expansion causes. > If, for some reason, you absolutely have to use a macro to generate > something like that above, at least have it expand to (list 1 2 3), > that way the macro can still be evaluated and no one gets shafted. And waste run time evaluating that list every time the defun runs? > You get the behavior you want and the macro is still expanding to a > valid form. Nobody has yet given a valid reason why I should care about a macro expansion being a "valid form" when the invoker is not going to evaluate it. cc-langs.el is chock full of such "invalid forms", yet they make the maintenance of 7 complicated language modes tractable. > Jeff -- Alan Mackenzie (Nuremberg, Germany).