|
From: | MON KEY |
Subject: | symbol equality --cl-rest-- help-function-arglist member vs member* and also equal, eql, and eq |
Date: | Mon, 21 Dec 2009 20:16:56 -0500 |
Why do symbol equality tests/comparisons with --cl-rest-- and `help-function-arglist' be so freaky? The only references I can find to --cl-rest-- in non-byte-compiled code are in: `cl-do-arglist' -> cl-macs.el' `cl-macroexpand-all' -> cl-extra.el Is there a reason for the following behavior that I'm missing or is this a bug (of some sort)? ;;; ============================== (defun* test-cl-rest (arg1 arg2 &key arg-key) arg-key) (test-cl-rest nil nil :arg-key "bubba") ;=> "bubba" (help-function-arglist 'test-cl-rest) ;=> (arg1 arg2 &rest --cl-rest--) (member '&rest (help-function-arglist 'test-cl-rest)) ;=> (&rest --cl-rest--) (member '--cl-rest-- (help-function-arglist 'test-cl-rest)) ;=> nil (cadr (member '&rest (help-function-arglist 'test-cl-rest))) ;=> --cl-rest-- (cadr (member* '&rest '(bubba &rest --cl-rest--))) ;=> --cl-rest-- ;; member & member (equal (cadr (member '&rest (help-function-arglist 'test-cl-rest))) (cadr (member '&rest (help-function-arglist 'test-cl-rest)))) ;=> t ;; member* & member* (equal (cadr (member* '&rest '(bubba &rest --cl-rest--))) (cadr (member* '&rest '(bubba &rest --cl-rest--)))) ;=> t ;; member & member* (equal (cadr (member '&rest (help-function-arglist 'test-cl-rest))) (cadr (member* '&rest (help-function-arglist 'test-cl-rest)))) ;=> t ;; member of arg list (equal '--cl-rest-- (cadr (member '&rest (help-function-arglist 'test-cl-rest)))) ;=> nil ;; member* of arg list (equal '--cl-rest-- (cadr (member* '&rest (help-function-arglist 'test-cl-rest)))) ;=> nil ;; member same symbol new list (member '--cl-rest-- (member '&rest '(bubba &rest --cl-rest--))) ;=> (--cl-rest--) ;; member* same symbol new list (member* '--cl-rest-- (member* '&rest '(bubba &rest --cl-rest--))) ;=> (--cl-rest--) ;; member same symbol new list (equal '--cl-rest-- (car (member '--cl-rest-- (member '&rest '(bubba &rest --cl-rest--))))) ;=> t ;; member* same symbol new list (equal '--cl-rest-- (car (member* '--cl-rest-- (member* '&rest '(bubba &rest --cl-rest--))))) ;=> t ;; member (let (a) (setq a (member '&rest (help-function-arglist 'test-cl-rest))) (equal '--cl-rest-- (cadr a))) ;=> nil ;; member* (let (a) (setq a (cadr (member* '&rest (help-function-arglist 'test-cl-rest)))) (equal '--cl-rest-- a)) ;=> nil (let (c) (mapc #'(lambda (y) (when (or (eq y '--cl-rest) (eql y '--cl-rest--) (equal y '--cl-rest--)) (push y c ))) (help-function-arglist 'test-cl-rest)) c) ;=> nil (equal (car '(--cl-rest--)) (car '(--cl-rest--))) ;=> t (eql (car '(--cl-rest--)) (car '(--cl-rest--))) ;=> t (eq (car '(--cl-rest-- 666)) (cadr '(666 --cl-rest--))) ;=> t ;; memq/member (memq '--cl-rest-- (member '&rest (help-function-arglist 'test-cl-rest))) ;=> nil ;; memql/member (memql '--cl-rest-- (member '&rest (help-function-arglist 'test-cl-rest))) ;=> nil ;; memq/member* (memq '--cl-rest-- (member* '&rest (help-function-arglist 'test-cl-rest))) => nil ;; memq/member* (memql '--cl-rest-- (member* '&rest (help-function-arglist 'test-cl-rest))) => nil ;; memql/member same-symbol new list (memql '--cl-rest-- (member '&rest '(bubba &rest --cl-rest--))) ;=> (--cl-rest--) ;; memq same-symbol new list (memq '--cl-rest-- '(arg1 arg2 &rest --cl-rest-- bubba)) ;=> (--cl-rest-- bubba) ;; member* (memql (cadr (member* '&rest '(bubba &rest --cl-rest--))) (help-function-arglist 'test-cl-rest)) ;=> nil ;;; ============================== s_P
[Prev in Thread] | Current Thread | [Next in Thread] |