lilypond-user
[Top][All Lists]
Advanced

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

Re: scheme-question: restricted list inserting


From: David Kastrup
Subject: Re: scheme-question: restricted list inserting
Date: Sat, 16 Sep 2017 22:20:15 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/26.0.50 (gnu/linux)

Thomas Morley <address@hidden> 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



reply via email to

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