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)
(apply list-insert-first-and-third (cdr lst) (cdr rest))
(cdr lst)))
lst))
Something like that? It's a bit more generic than you asked for, but so
what.
At any rate, it would appear that cons* would be a good building-block
even in your non-recursive approach.
--
David Kastrup
_______________________________________________
lilypond-user mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/lilypond-user