guile-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: %nil once again


From: Neil Jerram
Subject: Re: %nil once again
Date: Fri, 17 Jul 2009 08:59:04 +0100
User-agent: Gnus/5.11 (Gnus v5.11) Emacs/22.2 (gnu/linux)

Daniel Kraft <address@hidden> writes:

> Hi,

Hi Daniel!

> I think I got the test-suite as well as a basic macro implementation
> (the compiler framework is really cool, that was fairly easy to do);
> recursive macros do not yet work, but otherwise it looks fine.
>
> However, I want to tackle quasi-quotes (besides others) now; and in
> Elisp %nil is not only #f of Scheme but also the end-of-list marker (I
> guess that's why simply using Scheme's #f for %nil does not work).
>
> I did some experiments, and it seems that Scheme respects it partially:
>
> scheme@(guile-user)> `(1 2 3 . ,%nil)
> (1 2 3)
>
> (is %nil in Scheme a variable because it needs the unquote?)

Do you mean why don't we just use the symbol nil?  If so, the answer
is because in Scheme, (cons 'a 'nil) should be (a . nil), not (a).

> However:
>
> scheme@(guile-user)> (null? %nil)
> #f
> scheme@(guile-user)> (equal? %nil (cdr (list 1)))
> #f

I believe those work in the interpreter, and so are VM bugs.  Can you
check that with ,o interp #t ?

> So:  How is this handled by the interpreter?

Currently, by the relevant places using SCM_NULL_OR_NIL_P.  (But I
expect that Mark Weaver's patch may change that; I haven't looked at
it in detail yet.)

>  Is there maybe some
> runtime-option to make Guile use %nil as end-of-list for lists
> constructed?

No, this ability is always enabled.

>  Or could we introduce some means to do so?
>
> If that's not a good idea because of performance or other
> considerations, I guess I'll have to implement some conversion routine
> and use that?  This on the other hand will probably hit Elisp's
> performance.
>
> Any suggestions and ideas welcome!  Maybe I just fail to see something...

Just a couple of VM bugs, I think...

Regards,
        Neil




reply via email to

[Prev in Thread] Current Thread [Next in Thread]