Thomas Morley <thomasmorle...@gmail.com> 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 lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user