Subject: Re: problem with delete
From: Erik Naggum <erik@naggum.net>
Date: 2000/10/02
Newsgroups: comp.lang.lisp
Message-ID: <3179487227972133@naggum.net>

* Frode Vatvedt Fjeld <frodef@acm.org>
| You are _supposed_ to do (setf foo (delete 1 foo)). Simply doing
| (delete 1 foo) has an undefined result.

  No, it is very well defined.  It just isn't what some people expect.

| To understand this, note that DELETE is a function, and so takes
| arguments by value.

  There is nothing wrong with a delete function that modifies the list
  such that the variables keeps pointing to a list sans the first
  element.  (delete 1 (vector 1 2 3 4 5)) manages this, remember?

| This is a general rule that applies to most (or all?) destructive
| functions: They should be called exactly the same way you would call
| their non-destructive counterparts.

  Good point.  However, recall that they are allowed to nuke their
  arguments, so if you got any of those (susceptible) arguments from
  someone else and you haven't agreed on an object ownership protocol,
  you'd better be careful not to alter somebody else's objects.

#:Erik
-- 
  If this is not what you expected, please alter your expectations.