This is the mail archive of the guile@cygnus.com mailing list for the guile project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Transition from guile-ii to 1.2


> Date: Sun, 23 Nov 1997 13:59:45 -0800
> From: Rob Engle <grenoble@spimageworks.com>
> 
> I've been using guile-ii for some time now

My hat is off to you, sir.

> 1) when an error occured during a "load" guile-ii would give the line
> number at which the error was detected.

Unifying Guile's error reporting (both this question and #5 in your
message) is important to me, too.  It's very helpful to know where an
error occurred even in non-interactive mode.  However, other things
keep bumping the priority level.  We discussed this a while ago, and I
think the consensus was that Mikael is the most-qualified one to fix
this, and he's too busy to get to it. :-)

I took a stab at figuring out why Guile currently behaves the way that
you describe, and wasn't able to get far enough into the code to tell.

> A bunch of other things I've noted.  Most of these you all probably know
> but I'll state them in case I'm doing something wrong.
> 
> 1) "#f" used to mean empty list (in addition to "()").  As such:
> 	a. (cons 1 #f) used to return a proper list; now it returns
> 	   a dotted pair.  The fix is to use "()" instead.
> 	b. (null? #f) used to return #t; now it returns #f.  In some
> 	   cases (badly written) code was using "null?" instead of "not".
> 	   The fix is to use "not"

This is correct.  Those are the proper Scheme methods for handling
code that distinguishes the empty list from the false value: use `()'
and `null?' when your data concerns lists, and `#t', `#f', and `not'
when your data concerns truthhood.

> 2) "defined?" used to be a macro so that (defined? goober) was legit.
> 	Now, one must use (defined? 'goober)

I think Mark is right: watch this debate to see what happens.  I would
guess that you're right, but don't want to take chances.

> 3) "print" routine is gone... have to use (write obj) and (newline)
> instead

There's a `write-line' procedure now that does just that.

Thanks for asking such incisive questions!