From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Marc Tfardy Newsgroups: gmane.emacs.help Subject: Re: Element-Relative Sequence Insertion Date: Thu, 11 Jun 2009 16:18:23 +0200 Organization: http://onet.pl Message-ID: References: <7czlcf0wu9.fsf@pbourguignon.informatimago.com> <5f86d760-77b2-4ac0-897b-4eb8deca43fe@a36g2000yqc.googlegroups.com> <7cski62ach.fsf@pbourguignon.anevia.com> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 8bit X-Trace: ger.gmane.org 1244782735 8444 80.91.229.12 (12 Jun 2009 04:58:55 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Fri, 12 Jun 2009 04:58:55 +0000 (UTC) To: help-gnu-emacs@gnu.org Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Fri Jun 12 06:58:49 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 1MEyqm-0005PC-H6 for geh-help-gnu-emacs@m.gmane.org; Fri, 12 Jun 2009 06:58:48 +0200 Original-Received: from localhost ([127.0.0.1]:60246 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MEyql-0002bI-MG for geh-help-gnu-emacs@m.gmane.org; Fri, 12 Jun 2009 00:58:47 -0400 Original-Path: news.stanford.edu!headwall.stanford.edu!newsfeed.news2me.com!nx01.iad01.newshosting.com!newshosting.com!216.196.98.140.MISMATCH!border1.nntp.dca.giganews.com!nntp.giganews.com!newsfeed00.sul.t-online.de!t-online.de!plix.pl!newsfeed1.plix.pl!news.nask.pl!news.nask.org.pl!news.onet.pl!not-for-mail Original-Newsgroups: gnu.emacs.help Original-Lines: 64 Original-NNTP-Posting-Host: p4fd36367.dip.t-dialin.net Original-X-Trace: news.onet.pl 1244729905 23706 79.211.99.103 (11 Jun 2009 14:18:25 GMT) Original-X-Complaints-To: niusy@onet.pl Original-NNTP-Posting-Date: Thu, 11 Jun 2009 14:18:25 +0000 (UTC) User-Agent: Thunderbird 2.0.0.21 (Windows/20090302) In-Reply-To: <7cski62ach.fsf@pbourguignon.anevia.com> Original-Xref: news.stanford.edu gnu.emacs.help:169944 X-Mailman-Approved-At: Fri, 12 Jun 2009 00:58:24 -0400 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:65181 Archived-At: Pascal J. Bourguignon schrieb: > Nordlöw writes: > >> On 11 Juni, 14:38, p...@informatimago.com (Pascal J. Bourguignon) >> wrote: >>> Nordlöw writes: >>>> How do I insert an element (object) relative to another in a sequence >>>> (or list in my case)? Example: >>>> (insert-after 'X '(a b c) 'b) => '(a b X c) >>>> (insert-before 'X '(a b c) b) => '(a X b c) >>> This is not what you want. You don't what these function to return a >>> 2-element lists, the first of which is the symbol quote. Unless >>> you're doing meta-programming you never want to have such a result. >>> >>> You wan this: >>> >>> (insert-after 'X '(a b c) 'b) --> (a b X c) >>> (insert-before 'X '(a b c) 'b) --> (a X b c) >>> >>> Also, you may want to mention whether your insert-after and >>> insert-before function are destructive or non-destructive. Since you >>> show as only specification examples using literal data, we will assume >>> you want them to be non-destructive. >>> >>> So you do that, just by doing it. There's nothing simplier. >>> >>> (qrsha vafreg-nsgre (arj yvfg byq) >>> (pbaq ((ahyy yvfg) '()) >>> ((rdy byq (pne yvfg)) (pbaf (pne yvfg) (pbaf arj (pqe yvfg)))) >>> (g (pbaf (pne yvfg) (vafreg-nsgre arj (pqe yvfg) byq))))) >>> >>> (qrsha vafreg-orsber (arj yvfg byq) >>> (pbaq ((ahyy yvfg) '()) >>> ((rdy byq (pne yvfg)) (pbaf arj yvfg)) >>> (g (pbaf (pne yvfg) (vafreg-orsber arj (pqe yvfg) byq))))) >>> >>> -- >>> __Pascal Bourguignon__ >> But how do I implement insert-after() and insert-before()? I guess the >> code in the end doesn't do anything meaningful :) > > It does, but you have to decrypt it first. (defun insert-after (elt lst new) (cond ((null lst) '()) ((eq new (car lst)) (cons (car lst) (cons elt (cdr lst)))) (t (cons (car lst) (insert-after elt (cdr lst) new))))) (defun insert-before (elt lst new) (cond ((null lst) '()) ((eq new (car lst)) (cons elt lst)) (t (cons (car lst) (insert-before elt (cdr lst) new))))) What is the price? ;-) regards Marc