[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Element-Relative Sequence Insertion

From: Pascal J. Bourguignon
Subject: Re: Element-Relative Sequence Insertion
Date: Thu, 11 Jun 2009 15:01:18 +0200
User-agent: Gnus/5.101 (Gnus v5.10.10) Emacs/22.2 (gnu/linux)

Nordlöw <address@hidden> writes:

> On 11 Juni, 14:38, address@hidden (Pascal J. Bourguignon)
> wrote:
>> Nordlöw <address@hidden> 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.

Could you implement first something simplier than insert-after or

For example, could you implement a function map, which builds a new
list with the result of calling a function to each element of a list:

   (defun map (function list) ...) 

   (map (lambda (x) (1+ x)) '(1 2 3)) --> (2 3 4)
   (map (lambda (x) (1+ x)) '())      --> ()

If  you can do that, then you should be able to implement
insert-before and insert-after adding only one line.

__Pascal Bourguignon__

reply via email to

[Prev in Thread] Current Thread [Next in Thread]