Pascal Costanza  <pc@p-cos.net> wrote:
+---------------
| As to your original question, when a function returns a property list, 
| you can conveniently retrieve variable bindings using lambda or 
| destructuring-bind:
| 
| (destructuring-bind
|    (&key a b c) (some-function ...)
|    ... some code ...)
| 
| or:
| 
| (apply (lambda (&key a b c)
|           ... some code ...)
|    (some-function ...))
+---------------
Nice. The GET-PROPERTIES standard function will do part of this
for you [looking for multiple indicators at once], but you have
to write a loop around it to get the same results as the above.
Caveat: To use the above in the general case, some additional
constraints are needed:
1. Either: (a) the property lists SOME-FUNCTION returns need
   to use keywords as markers, not just any old symbols; or else
   (b) each parameter X in the lambda lists must be re-written
   as ((X X)) [rather ugly, IMHO, but does work].
2. If you're only binding a few of the indicators in the supplied
   property list, your lambda list also needs &ALLOW-OTHER-KEYS.
But that said, it is a neat hack, well worth remembering:
    > (defun some-function ()
	(list :x 0 :c 3 :y 234 :b 2 :sldk 34 :a 1 :kdjf 12))
    SOME-FUNCTION
    > (destructuring-bind (&key a b c &allow-other-keys)
	  (some-function)
	(list a b c))
    (1 2 3)
    > (apply (lambda (&key a b c &allow-other-keys)
	       (list b c a))
	     (some-function))
    (2 3 1)
    > 
And if you really need non-keyword indicators:
    > (defun some-other-function ()
	(list 'x 0 'c 6 'y 234 'b 5 'sldk 34 'a 4 'kdjf 12))
    SOME-OTHER-FUNCTION
    > (destructuring-bind (&key ((a a)) ((b b)) ((c c)) &allow-other-keys)
	  (some-other-function)
	(list a b c))
    (4 5 6)
    > (apply (lambda (&key ((a a)) ((b b)) ((c c)) &allow-other-keys)
	       (list b c a))
	     (some-other-function))
    (5 6 4)
    > 
-Rob
-----
Rob Warnock			<rpw3@rpw3.org>
627 26th Avenue			<URL:http://rpw3.org/>
San Mateo, CA 94403		(650)572-2607