all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: "Drew Adams" <drew.adams@oracle.com>
To: "'Stephen J. Turnbull'" <stephen@xemacs.org>
Cc: emacs-devel@gnu.org
Subject: RE: Replacement for `aput' from obsolete assoc.el?
Date: Sat, 9 Jun 2012 09:11:24 -0700	[thread overview]
Message-ID: <2B4A444C5CD5486DA0403B9E6B99F37D@us.oracle.com> (raw)
In-Reply-To: <m2txykn7gh.fsf@linux-m68k.org>

Alists and plists each have their advantages.

The main difference is mentioned in (elisp) `Plists and Alists':

 In contrast to association lists, the order of the pairs
 in the property list is not significant since the property
 names must be distinct.

That gives alists the ability to shadow associations.

 An association list may be used like a stack where associations
 are pushed on the front of the list and later discarded...

And it means that:

 All properties for a symbol are stored in the same property
 list, so there is a possibility of a conflict between different
 uses of a property name.

[But sure, you could use a plist as a stack, with shadowing, by defining your
own accessor etc.  It's just a list, after all.  But `plist-get' and `get' do
not act that way.]

The advantage for plists pointed out in that doc section is that plists are what
you get with symbols - they are built in.  It contrasts a global alist with the
plists associated with individual symbols.

[But that's just the way things are designed.  Lisp could be/have been designed
with individual symbols having asssociated alists instead of plists.]

Here is another typical difference (from (elisp) `Association Lists'):

 Both the values and the keys in an alist may be any Lisp
 objects. For example, in the following alist, the symbol
 `a' is associated with the number `1', and the string `"b"'
 is associated with the _list_ `(2 3)', which is the CDR of
 the alist element: ((a . 1) ("b" 2 3))

[But again, a plist too could use anything as a key, provided you roll your own
accessor.  But `plist-get' and `get' use `eq' comparison.]

In short, each is just a list; each is general enough to replace the other.  But
to do so means going beyond the usual accessors etc.  And in the case of symbol
properties it would require a different Lisp implementation (or some indirection
hack).




  parent reply	other threads:[~2012-06-09 16:11 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-04 16:46 Replacement for `aput' from obsolete assoc.el? Michael Heerdegen
2012-06-05  3:27 ` Christopher Schmidt
2012-06-05 17:43   ` Stefan Monnier
2012-06-05 19:31     ` Michael Heerdegen
2012-06-05 22:52       ` Stefan Monnier
2012-06-08  7:57       ` Vitalie Spinu
2012-06-08 12:39         ` Stephen J. Turnbull
2012-06-08 19:50           ` Stefan Monnier
2012-06-09  8:59             ` Stephen J. Turnbull
2012-06-09  9:46               ` Andreas Schwab
2012-06-09 10:13                 ` Thien-Thi Nguyen
2012-06-10 12:11                   ` Stephen J. Turnbull
2012-06-09 16:11                 ` Drew Adams [this message]
2012-06-09 16:17                   ` Drew Adams
2012-06-09 11:32               ` Vitalie Spinu
2012-06-10 12:53                 ` Stephen J. Turnbull
2012-06-09 16:10               ` Drew Adams
2012-06-10  0:52               ` Stefan Monnier
2012-06-10 13:48                 ` Stephen J. Turnbull

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=2B4A444C5CD5486DA0403B9E6B99F37D@us.oracle.com \
    --to=drew.adams@oracle.com \
    --cc=emacs-devel@gnu.org \
    --cc=stephen@xemacs.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.