[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Is it safe to modify a property list directly with PLIST-PUT?
From: |
Teemu Likonen |
Subject: |
Re: Is it safe to modify a property list directly with PLIST-PUT? |
Date: |
Mon, 27 Jul 2009 20:45:02 +0300 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/23.1.50 (gnu/linux) |
On 2009-07-27 10:31 (+0200), Pascal J. Bourguignon wrote:
> No, it wont' always work. The problem occurs when the plist is nil,
> since nil is a constant symbol that is immutable.
>
> (let ((p '())) ; the nil symbol
> (plist-put p :bar 2)
> p)
> --> nil
>
> It seems that in the case of a non-null plist, emacs lisp adds the
> missing key to the tail of the plist (which doesn't incurs any
> additionnal cost, since the plist is already traversed for searching
> the key). It only means that plist-put is a "destructive" function
> when the plist is not null.
>
>
> So if you don't want to store back the result of plist-put, you just
> have to ensure that the plist is not empty. You may initialize them
> with an unused key/value pair.
Thanks, again. So far I've used Emacs Lisp mostly non-destructively and
functionally. Only recently started to study what's happening on lower
levels. If one seriously needs to assign elements to lists or other
sequences I think SETF is the way. But it's kind of sad that CL
extension is not a first-class citizen in GNU Emacs.
Have Emacs developers ever considered switching completely to Common
Lisp and implementing the most important Emacs Lisp features on top of
that?