Thomas Morley <[email protected]> writes:
> 2017-09-16 22:20 GMT+02:00 David Kastrup <[email protected]>:
>> Thomas Morley <[email protected]> writes:
>>
>>> Hi all,
>>>
>>> what's the best (less expensive) method to insert elements only at the
>>> head of a list and between first and second element of said list.
>>> But don't insert an element at list-end if the list is of length 1.
>>>
>>> I do have:
>>>
>>> (define (list-insert-first-and-third lst arg1 arg2)
>>> (if (pair? lst)
>>> (append
>>> (list arg1)
>>> (list (car lst))
>>> (if (pair? (cdr lst))
>>> (list arg2)
>>> '())
>>> (cdr lst))
>>> lst))
>>>
>>> (display (list-insert-first-and-third '(1 2 3 4 5) "a" "b"))
>>>
>>> --> (a 1 b 2 3 4 5)
>>>
>>> This looks clumsy, though.
>>>
>>> Any hint for a better code?
>>
>> (define (list-insert-first-and-third lst arg1 . rest)
>> (if (pair? lst)
>> (cons* arg1 (car lst)
>> (if (pair? rest)
>
> As far as I can tell the line below misses one argument
>> (apply list-insert-first-and-third (cdr lst) (cdr rest))
> (apply list-insert-first-and-thirds (cdr lst) (car rest) (cdr
> rest))
> works for me.
Argl. I messed up one of the more elegant pieces: it's actually just
(apply list-insert-first-and-thirds (cdr lst) rest)
Less is more. Sorry for that.
>> (cdr lst)))
>> lst))
>>
>> Something like that? It's a bit more generic than you asked for, but so
>> what.
--
David Kastrup
_______________________________________________
lilypond-user mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/lilypond-user