Subject: Re: delete?
From: Erik Naggum <clerik@naggum.no>
Date: 1998/01/24
Newsgroups: comp.lang.lisp
Message-ID: <3094662584086617@naggum.no>


* Greg Schohn
| could anybody explain to me why this code has problems deleting the first
| element of a list when it is selected ...

  DELETE is like NREVERSE or SORT in that they all work through destructive
  operations on (parts of) the argument value, but it is the value returned
  from the function that has all the properties of the performed operation.
  any prior access paths to the argument value will now hold a value that
  is not useful unless you know _exactly_ what the function did.  it's safe
  to assume that you don't, since you had to ask.  in many cases, it is not
  even possible to know exactly what a function did since an implementation
  is free to perform the function in any way that maintains the specified
  invariants and results.  e.g., DELETE on a list is likely to return the
  first cons cell whose car is _not_ the item you want deleted.  if you
  think about it, you realize that it couldn't do anything else, because it
  would have needed access to whatever contained the list as its value to
  do that and only the caller has access to that since Lisp calls functions
  with the computed _values_ of all arguments.  you will therefore have to
  assign the returned value back to the variable to get the desired effect
  of deleting the first element.  (isn't this in some FAQ already?)

#:Erik
-- 
The year "98" was new 1900 years ago.  |  Help fight MULE in GNU Emacs 20!
Be year 2000 compliant, write "1998"!  |  http://sourcery.naggum.no/emacs/