all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Ivan Kanis <ivan.kanis@googlemail.com>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: emacs help <help-gnu-emacs@gnu.org>
Subject: Re: defining a setter function with gv.el
Date: Mon, 27 Aug 2012 20:10:53 +0200	[thread overview]
Message-ID: <87vcg4cij6.fsf@googlemail.com> (raw)
In-Reply-To: <jwvlih0ld2j.fsf-monnier+emacs@gnu.org> (Stefan Monnier's message of "Mon, 27 Aug 2012 08:54:42 -0400")

Stefan Monnier <monnier@iro.umontreal.ca> wrote:

> So I think what you mean is that you want
>
>   (my-function) => tree
>   (setf (my-function) 'shrub)
>   (my-function) => shrub

Yup exactly.

> As for you specific question, I suspect that it is answered in the last
> few lines of gv.el:
>
>    ;;; Vaguely related definitions that should be moved elsewhere.
>    
>    ;; (defun alist-get (key alist)
>    ;;   "Get the value associated to KEY in ALIST."
>    ;;   (declare
>    ;;    (gv-expander
>    ;;     (lambda (do)
>    ;;       (macroexp-let2 macroexp-copyable-p k key
>    ;;         (gv-letplace (getter setter) alist
>    ;;           (macroexp-let2 nil p `(assoc ,k ,getter)
>    ;;             (funcall do `(cdr ,p)
>    ;;                      (lambda (v)
>    ;;                        `(if ,p (setcdr ,p ,v)
>    ;;                           ,(funcall setter
>    ;;                                     `(cons (cons ,k ,v) ,getter)))))))))))
>    ;;   (cdr (assoc key alist)))
>    

Good grief, does it have to be so complicated for such a simple need?
-- 
Ivan Kanis
http://ivan.kanis.fr

O Love, O fire! Once he drew
With one long kiss my whole soul through
My lips, as sunlight drinketh dew.
    -- Alfred, Lord Tennyson



  reply	other threads:[~2012-08-27 18:10 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-27  5:56 defining a setter function with gv.el Ivan Kanis
2012-08-27 12:54 ` Stefan Monnier
2012-08-27 18:10   ` Ivan Kanis [this message]
2012-08-27 20:28     ` Stefan Monnier
2012-08-30 16:05       ` Ivan Kanis
2012-08-31  0:59         ` Stefan Monnier

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=87vcg4cij6.fsf@googlemail.com \
    --to=ivan.kanis@googlemail.com \
    --cc=help-gnu-emacs@gnu.org \
    --cc=monnier@iro.umontreal.ca \
    /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.