unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* symbol equality --cl-rest-- help-function-arglist member vs member* and also equal, eql, and eq
@ 2009-12-22  1:16 MON KEY
  2009-12-22  2:22 ` Miles Bader
  2009-12-22  2:32 ` Stephen J. Turnbull
  0 siblings, 2 replies; 5+ messages in thread
From: MON KEY @ 2009-12-22  1:16 UTC (permalink / raw)
  To: emacs-devel

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




^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2009-12-23  8:59 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-12-22  1:16 symbol equality --cl-rest-- help-function-arglist member vs member* and also equal, eql, and eq MON KEY
2009-12-22  2:22 ` Miles Bader
2009-12-22 23:57   ` MON KEY
2009-12-23  8:59     ` David Kastrup
2009-12-22  2:32 ` Stephen J. Turnbull

Code repositories for project(s) associated with this public inbox

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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).