unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
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




             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

  List information: https://www.gnu.org/software/emacs/

* 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 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).