emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

symbol equality --cl-rest-- help-function-arglist member vs member* and


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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]