Subject: Re: data hygiene [Re: Why is Scheme not a Lisp?] From: Erik Naggum <erik@naggum.net> Date: Mon, 18 Mar 2002 23:35:13 GMT Newsgroups: comp.lang.lisp Message-ID: <3225483324695497@naggum.net> * Thomas Bushnell, BSG > But I think it's generally thought by Lispers that it's a shame that > plists and alists have different structure, and if it were to be done > over again, plists would have the alist structure. So you can't > destructure a plist easily, but except when actually dealing with plists, > you are advised in Common Lisp to use alists instead, in general. * Janis Dzerins > How do you come up with this stuff? * Thomas Bushnell, BSG | Um, it's true. plists and alists have unfortunately different | representations, for historical reasons. And from this you conclude the "shame" part? And this "unfortunately" part is so prejudicial it hurts. | The alist representation is better (for one thing, it's just prettier, | but also, it allows for NIL properties). What on earth are you talking about? Neither properties named nil nor properties on the symbol nil are a problem: (get 'nil 'nil 42) => 42 (setf (get 'nil 'nil) t) => t (get 'nil 'nil 42) => t I think you should try to realize that you do not know these things and stop embarrassing yourself by posting more obviously clueless falsehood. | plists are stuck with the first way, however, because there is just way | too much code that knows how they work. Are you sure you are not confusing plist and alists? Are you confused by the fact that a nil in an alist is effectively ignored with any nil properties? (assoc nil '(nil (nil . 1) (2 . nil))) => (nil . 1) (rassoc nil '(nil (nil . 1) (2 . nil))) => (2) | But if you want to make your own assoc list, you always use the alist | representation and not the plist representation, with the exception of | what you store on actual symbols' plists. Really? Did you know that you can use destructuring-bind to pick up a bunch of values from a plist, but that you have no such handy tool with alists? (properties <whatever>) => (:root 'n :toot 'n :foo 47 :bar 11 :zot 'yeah) (destructuring-bind (&key foo bar zot &allow-other-keys) (properties <whatever>) (values foo bar zot)) => 47 => 11 => 'yeah I use this technique quite frequently to avoid having a whole bunch of empty slots in classes or structures. I trust that keyword handling in Common Lisp is implemented efficiently because it is such an integral part of the language. In a language that lacked such integral features, I would be much less likely to believe that some incidental library was sufficiently well implemented that I could use it. /// -- In a fight against something, the fight has value, victory has none. In a fight for something, the fight is a loss, victory merely relief.