gcl-devel
[Top][All Lists]
Advanced

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

Re: [Gcl-devel] Feedback on ANSI bugfixes


From: Camm Maguire
Subject: Re: [Gcl-devel] Feedback on ANSI bugfixes
Date: 01 Oct 2002 17:35:39 -0400

Hello again!  I saved this old message to remind me of these issues
which have been outstanding for some time.  I think these are fixed
now.  If you find otherwise, please let me know.

Take care,

"Paul F. Dietz" <address@hidden> writes:

> Camm Maguire wrote:
> 
> > > (TAILP 10203040506070 (LIST* 'CL-TEST::A 'CL-TEST::B
> > >                                   (1- 10203040506071)))
> > >   ==> NIL
> > > when it should be true (the arithmetic in this test prevents
> > > an aggressive [reader] from making the two numbers EQ.)
> > >
> > 
> > I don't quite get this 'aggressive reader' bit.  Clearly the two items
> > aren't eq?  If not, what makes them so, and where does one draw the
> > line?  I.e. one could nest arbitrarily deeply, no?
> 
> Sorry, I should have said an aggressive compiler, not an aggressive reader.
> The compiler is allowed to coalesce the shared structure of literal
> constants; the CMU CL compiler does this, for instance.  I want to be
> able to compile these tests (at various optimization settings) before
> running them, to detect compiler bugs.
> 
> The test still has a problem, since a conforming lisp implementation
> can also dynamically make EQL bignums be EQ.  So the test should have
> included a check that the two numbers were not EQ.
> 
> 
> > > This is the test case for the set-exclusive-or problem.
> > > I've had arguments with other Lisp implementors as to
> > > whether the standard really calls for this behavior.
> > > IIRC, CMUCL does not enforce this ordering constraint.
> > >
> > > (let ((list1 '(a b c d))
> > >         (list2 '(e f g h)))
> > >       (block fail
> > >             (set-exclusive-or
> > >              list1 list2
> > >              :test #'(lambda (s1 s2)
> > >                        (when (or (member s1 list2)
> > >                                  (member s2 list1))
> > >                          (return-from fail 'failed))))))
> > >    ==> failed
> > > when it should return some permutation of (a b c d e f g h).
> > >
> > 
> > OK, I'll try to investigate this.  Is this part of the standard tests?
> > If not, why do you need this?
> 
> 
> It comes from this paragraph in the SET-EXCLUSIVE-OR entry of the CLHS,
> in particular the second sentence:
> 
>  If :key is supplied, it is used to extract the part to be tested
>  from the list-1 or list-2 element. The first argument to the :test
>  or :test-not function is the part of an element of list-1 extracted
>  by the :key function (if supplied); the second argument is the part
>  of an element of list-2 extracted by the :key function (if supplied).
>  If :key is not supplied or nil, the list-1 or list-2 element is used.
> 
> You *might* interpret this to mean that if :key is not supplied then
> the order can be changed, but I consider that to be misreading an
> ambiguity.
> 
>       Paul
> 
> 

-- 
Camm Maguire                                            address@hidden
==========================================================================
"The earth is but one country, and mankind its citizens."  --  Baha'u'llah




reply via email to

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