unofficial mirror of guile-devel@gnu.org 
 help / color / mirror / Atom feed
From: Daniel Kraft <d@domob.eu>
To: Neil Jerram <neil@ossau.uklinux.net>
Cc: Andy Wingo <wingo@pobox.com>, guile-devel <guile-devel@gnu.org>
Subject: Re: %nil once again
Date: Fri, 17 Jul 2009 11:02:46 +0200	[thread overview]
Message-ID: <4A603E36.7080100@domob.eu> (raw)
In-Reply-To: <8763drbv07.fsf@arudy.ossau.uklinux.net>

Hi Neil,

Neil Jerram wrote:
> Daniel Kraft <d@domob.eu> writes:
>> 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).

No, I mean why '(1 2 3 . %nil) does yield (1 2 3 . %nil) while `(1 2 3 . 
,%nil) gives the expected (1 2 3).  But that does not matter much 
besides astonishing me, as this is only something related to the Scheme 
implementation of %nil, I guess.

>> 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 ?

The first one is indeed #t with the interpreter, the second one not. 
But unfortunatly I think that the elisp equivalent of

(equal?/eqv?/eq? (cdr (list 1)) nil)

(don't know which predicates take the place of eq?/eqv?/equal? in elisp 
yet)  should indeed yield true, as a perfectly valid way to check for 
(null? (cdr (list 1))), right?  So it seems that in this case even the 
Guile interpreter does not handle empty lists as it should for elisp -- 
or don't we need to ensure that test is true?

>>  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...

Hm, ok, so if the one thing above is resolved (or can be ignored) I can 
without any problems just use Guile's primitive list and co. and take 
created lists as valid for Elisp, as long as those bug get fixed (maybe 
with the pending patch)?  So no need for ensuring myself that all '()'s 
get replaced by %nil's?

Daniel

-- 
Done:  Arc-Bar-Cav-Ran-Rog-Sam-Tou-Val-Wiz
To go: Hea-Kni-Mon-Pri




  reply	other threads:[~2009-07-17  9:02 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-07-16 13:47 %nil once again Daniel Kraft
2009-07-17  7:59 ` Neil Jerram
2009-07-17  9:02   ` Daniel Kraft [this message]
2009-07-17 14:20     ` Andreas Rottmann
2009-07-19 18:28     ` Neil Jerram
2009-07-19 19:44       ` Daniel Kraft
2009-07-19 20:10         ` Neil Jerram
2009-07-20  3:33           ` Ken Raeburn
2009-07-20  8:12             ` Daniel Kraft
2009-07-20  9:15               ` Ken Raeburn
2009-07-23 22:18             ` Andy Wingo
2009-07-20 18:17 ` Clinton Ebadi
2009-07-30 21:38   ` Neil Jerram
2009-07-31  5:03     ` Daniel Kraft
2009-07-23 20:35 ` Andy Wingo
2009-07-24  6:20   ` Daniel Kraft
2009-07-30 21:50   ` Neil Jerram
2009-07-31  5:05     ` Daniel Kraft

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=4A603E36.7080100@domob.eu \
    --to=d@domob.eu \
    --cc=guile-devel@gnu.org \
    --cc=neil@ossau.uklinux.net \
    --cc=wingo@pobox.com \
    /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).