From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: pjb@informatimago.com (Pascal J. Bourguignon) Newsgroups: gmane.emacs.help Subject: Re: Basic questions about elisp Date: Thu, 05 Nov 2009 15:58:42 +0100 Organization: Informatimago Message-ID: <87eioddnml.fsf@galatea.local> References: <1e9f8449-09ec-4a84-a332-9f05fadb8aa3@z41g2000yqz.googlegroups.com> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: ger.gmane.org 1257435980 19615 80.91.229.12 (5 Nov 2009 15:46:20 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Thu, 5 Nov 2009 15:46:20 +0000 (UTC) To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Thu Nov 05 16:46:04 2009 Return-path: Envelope-to: geh-help-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1N64XC-0005cA-ND for geh-help-gnu-emacs@m.gmane.org; Thu, 05 Nov 2009 16:46:03 +0100 Original-Received: from localhost ([127.0.0.1]:38987 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1N64XB-0004Ok-58 for geh-help-gnu-emacs@m.gmane.org; Thu, 05 Nov 2009 10:46:01 -0500 Original-Path: news.stanford.edu!usenet.stanford.edu!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail Original-Newsgroups: gnu.emacs.help Original-Lines: 33 Original-X-Trace: individual.net CkSqKZ286czf2hhMHdk2DA8AUaZg6ED5Oa7ea/0bfSXg+G+4Nv Cancel-Lock: sha1:NjZjM2IxZDQxZWMyM2VmMDg1OTZmNTBiNzllNjRlZWVlM2ZlMzcyNg== sha1:OAkZDaPLdgfKHCk5sVDCD0Poo+Q= Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwAQMAAABtzGvEAAAABlBMVEUAAAD///+l2Z/dAAAA oElEQVR4nK3OsRHCMAwF0O8YQufUNIQRGIAja9CxSA55AxZgFO4coMgYrEDDQZWPIlNAjwq9 033pbOBPtbXuB6PKNBn5gZkhGa86Z4x2wE67O+06WxGD/HCOGR0deY3f9Ijwwt7rNGNf6Oac l/GuZTF1wFGKiYYHKSFAkjIo1b6sCYS1sVmFhhhahKQssRjRT90ITWUk6vvK3RsPGs+M1RuR mV+hO/VvFAAAAABJRU5ErkJggg== X-Accept-Language: fr, es, en X-Disabled: X-No-Archive: no User-Agent: Gnus/5.1008 (Gnus v5.10.8) Emacs/22.3 (darwin) Original-Xref: news.stanford.edu gnu.emacs.help:174425 X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.help:69499 Archived-At: Francis Moreau writes: > I did the following macro to do that, although I'm not sure it's the > good thing to do: > > (defmacro x-nconc (l e) > `(if (null ,l) (setq ,l ,e) (nconc ,l ,e))) It's ok, but it works only on variables. If you want your macro to work on places too, you could use setf instead of setq (actually, you could always use setf instead of setq): (require 'cl) (defmacro* nconcf (place expression &environment environment) (destructuring-bind (vars vals store-vars writer-form reader-form) (get-setf-method place environment) (when (rest store-vars) (error "Cannot expand %S" place)) `(let ,(mapcar* (function list) vars vals) (let ((,(first store-vars) ,reader-form)) (setq ,(first store-vars) (nconc ,(first store-vars) ,expression)) ,writer-form)))) (let ((a (make-vector 3 '())) (i 0)) (nconcf (aref a (incf i)) '(x)) (nconcf (aref a (decf i)) '(y)) (nconcf (aref a (incf i)) '(x)) a) --> [(y) (x x) nil] -- __Pascal Bourguignon__