From: ·······@arti.vub.ac.be
Subject: remove-if and fill-pointer
Date: 
Message-ID: <l34ra0s8l1.fsf@artipc18.vub.ac.be>
Hello,

I noticed that when using remove,remove-if etc. functions on an
adjustable array or an array with a fill-pointer, the result is an
array _without_ a fill-pointer and that is not adjustable.

Why is this?

And is there a way to remove elements from (the interior of a)
fill-pointer array and still have a fill-pointer array as the result
without defining a new fill-pointer-remove-if function or redefining
remove-if etc. ?

Thanks, Joachim.

From: Paul F. Dietz
Subject: Re: remove-if and fill-pointer
Date: 
Message-ID: <3DE788A8.8080806@dls.net>
·······@arti.vub.ac.be wrote:
> Hello,
> 
> I noticed that when using remove,remove-if etc. functions on an
> adjustable array or an array with a fill-pointer, the result is an
> array _without_ a fill-pointer and that is not adjustable.
> 
> Why is this?

Because the standard requires it:

Section 17.1:

"A sequence function is a function defined by this specification or
  added as an extension by the implementation that operates on one or
  more sequences. Whenever a sequence function must construct and return
  a new vector, it always returns a simple vector. Similarly, any strings
  constructed will be simple strings."

	Paul
From: Paul F. Dietz
Subject: Re: remove-if and fill-pointer
Date: 
Message-ID: <3DE790B1.9080907@dls.net>
I wrote:

>> I noticed that when using remove,remove-if etc. functions on an
>> adjustable array or an array with a fill-pointer, the result is an
>> array _without_ a fill-pointer and that is not adjustable.
>>
>> Why is this?
> 
> 
> Because the standard requires it:

Atually, this isn't right.  It's possible that arrays with fill
pointers or adjustable arrays are also simple, but they typically aren't
in Lisps implemented on stock hardware.

	Paul
From: ·······@arti.vub.ac.be
Subject: Re: remove-if and fill-pointer
Date: 
Message-ID: <l3znrsqs7z.fsf@artipc18.vub.ac.be>
"Paul F. Dietz" <·····@dls.net> writes:

> ·······@arti.vub.ac.be wrote:
> > Why is this?
> 
> Because the standard requires it (Section 17.1)

ok, this is rather uncounterable :-)

but what about my second question? Maybe I should rephrase it:

"What are fill-pointer arrays for if you can only implement a stack
with them and not e.g. remove elements?"

Joachim.
From: Tim Bradshaw
Subject: Re: remove-if and fill-pointer
Date: 
Message-ID: <ey3bs48te44.fsf@cley.com>
* joachim  wrote:

> "What are fill-pointer arrays for if you can only implement a stack
> with them and not e.g. remove elements?"

Well, the classic answer would be some kind of buffer object.  Say I'm
reading chunks of data into a buffer, and I don't know how big they
are, but I know there's some maximum size (or maybe, if the size is
bigger than I've allowed for I'm willing to use ADJUST-ARRAY to
allocate a bigger buffer).  I want to reuse the buffer, but I don't
want to have to keep passing around the information that only the
first n elements of this thing actually have useful data.  So I use a
fill pointer to tell me that.

However, going back to your original question, I think you may be
confused about what REMOVE &co do - they are nondestructive functions,
so they aren't allowed to alter the arrays that are their arguments.
DELETE &co are allowed to be destructive, but don't have to be so.

--tim
From: Erik Naggum
Subject: Re: remove-if and fill-pointer
Date: 
Message-ID: <3247584102749554@naggum.no>
* ·······@arti.vub.ac.be
| I noticed that when using remove,remove-if etc. functions on an
| adjustable array or an array with a fill-pointer, the result is an array
| _without_ a fill-pointer and that is not adjustable.
| 
| Why is this?

  Because you ask for a new sequence with the `remove� version.
  
  Perhaps you should investigate the `delete� versions?

-- 
Erik Naggum, Oslo, Norway

Act from reason, and failure makes you rethink and study harder.
Act from faith, and failure makes you blame someone and push harder.