unofficial mirror of guile-devel@gnu.org 
 help / color / mirror / Atom feed
From: Neil Jerram <neil@ossau.uklinux.net>
Cc: guile-devel@gnu.org, guile-user@gnu.org
Subject: Re: macros, procedure->macro
Date: 15 Jul 2002 23:42:09 +0100	[thread overview]
Message-ID: <m3znws4nr2.fsf@laruns.ossau.uklinux.net> (raw)
In-Reply-To: <Pine.GSO.4.05.10207142321410.23724-100000@sallust.ida.ing.tu-bs.de>

>>>>> "Dirk" == Dirk Herrmann <dirk@sallust.ida.ing.tu-bs.de> writes:

    Dirk> To clarify I would like to re-state my answer to a previous mail to you:

Thanks - the following is exactly what I've been looking for.  (I'm
pretty sure that I have not previously received any such email,
though.)

    Dirk> Macro expansion is neither performed like reading, nor like evaluation.
    Dirk> Macro expansion is blocked by quoting _and_ macro definitions.  It is not
    Dirk> blocked by lambda or other special forms.  Since macro expansion is
    Dirk> blocked by macro definitions, recursive macro definitions are possible.

This sounds good.  But, given that the code for a macro definition
gets wrapped in a lambda, perhaps it would be simpler to say that all
lambdas block macroexpansion, and that macroexpansion of the code
inside the lambda happens when the lambda is first used.  This seems
well defined and easy to understand to me.

    Dirk> Given this, it should be clear why
    Dirk>   (define (foo) (bar))
    Dirk>   (define-macro (bar) #f)
    Dirk>   (foo)
    Dirk> will not work:  The first line is expanded at once.  In contrast,
    Dirk>   (define-macro (foo x) `(list ,(bar x) ,x))
    Dirk>   (define-macro (bar x) `(* ,x ,x))
    Dirk> will work, because the macro definition will not be expanded.

If we follow the all lambdas idea, then the `define' example would
work as well.  Is there any reason why this would be a _bad_ thing?

    Dirk> However, it may be that different macro implementations with different
    Dirk> behaviours can co-exist.  For example, I don't see why you shouldn't be
    Dirk> able to mix calls to procedure->memoizing-macro with calls to
    Dirk> define-macro.  Then, for each of the different macro systems the behaviour
    Dirk> would have to be defined separately.  Not all possible systems will comply
    Dirk> with the demand for a system that supports compilation and efficient
    Dirk> execution, though.

In general, yes.  I don't understand your specific example, though, as
define-macro is implemented using procedure->memoizing-macro, so they
are the same implementation.

        Neil


_______________________________________________
Guile-devel mailing list
Guile-devel@gnu.org
http://mail.gnu.org/mailman/listinfo/guile-devel


  parent reply	other threads:[~2002-07-15 22:42 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <m3lm8e5o69.fsf@laruns.ossau.uklinux.net>
2002-07-14 21:35 ` macros, procedure->macro Dirk Herrmann
2002-07-15 20:48   ` Marius Vollmer
2002-07-15 22:42   ` Neil Jerram [this message]
2002-07-16 22:00     ` Dirk Herrmann
     [not found] <87n0t376c9.fsf@zagadka.ping.de>
2002-07-08 20:23 ` Dirk Herrmann
2002-07-09 18:13   ` Marius Vollmer
2002-07-10 21:54 ` Dirk Herrmann
2002-07-13  9:53   ` Dirk Herrmann
2002-07-13 18:38     ` Marius Vollmer
     [not found] <200207012220.PAA08054@onyx.he.net>
2002-07-03 20:08 ` Dirk Herrmann
2002-07-04 20:16   ` Dirk Herrmann
2002-07-07 18:15     ` Marius Vollmer
2002-07-01 19:56 Dirk Herrmann
2002-07-01 21:30 ` Rob Browning
2002-07-03 20:24   ` Dirk Herrmann
2002-07-01 22:14 ` Marius Vollmer
2002-07-03 20:11   ` Dirk Herrmann
2002-07-07 17:54     ` Marius Vollmer
2002-07-08 20:31       ` Dirk Herrmann
2002-07-09 18:22         ` Marius Vollmer
2002-07-10  5:21           ` Dirk Herrmann
2002-07-10 19:31             ` Marius Vollmer
2002-07-10 19:57               ` Dirk Herrmann
2002-07-10 20:08                 ` Marius Vollmer
2002-07-01 22:17 ` Gary Houston
2002-07-09 21:16 ` Neil Jerram
2002-07-10  5:46   ` Dirk Herrmann
2002-07-10 10:15     ` Neil Jerram
2002-07-10 20:03       ` Dirk Herrmann
2002-07-13  0:09         ` Neil Jerram
2002-07-13  2:36           ` Clinton Ebadi
2002-07-14 15:23             ` Neil Jerram
2002-07-14 16:26               ` Marius Vollmer
2002-07-15  6:03                 ` Rob Browning
2002-07-13  6:53           ` Dirk Herrmann
2002-07-14 15:23             ` Neil Jerram

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.gnu.org/software/guile/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m3znws4nr2.fsf@laruns.ossau.uklinux.net \
    --to=neil@ossau.uklinux.net \
    --cc=guile-devel@gnu.org \
    --cc=guile-user@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).