From: MON KEY <monkey@sandpframing.com>
To: emacs-devel@gnu.org
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 [thread overview]
Message-ID: <d2afcfda0912211716v41d993c4hb8fb16b0fee97a30@mail.gmail.com> (raw)
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
next reply other threads:[~2009-12-22 1:16 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-12-22 1:16 MON KEY [this message]
2009-12-22 2:22 ` symbol equality --cl-rest-- help-function-arglist member vs member* and also equal, eql, and eq Miles Bader
2009-12-22 23:57 ` MON KEY
2009-12-23 8:59 ` David Kastrup
2009-12-22 2:32 ` Stephen J. Turnbull
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=d2afcfda0912211716v41d993c4hb8fb16b0fee97a30@mail.gmail.com \
--to=monkey@sandpframing.com \
--cc=emacs-devel@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.