]> git.donarmstrong.com Git - lilypond.git/commitdiff
Fix `split-at-predicate' in `scm/lily-library.scm'.
authorThomas Morgan <tlm@ziiuu.com>
Thu, 12 Nov 2009 20:07:58 +0000 (20:07 +0000)
committerNeil Puttock <n.puttock@gmail.com>
Thu, 12 Nov 2009 20:15:01 +0000 (20:15 +0000)
Don't make the assumption that if `(PRED previous_element element)'
is false, `(PRED element previous_element)' must be true.

Suppose we want to split `(1 2 3 5 7)' into two lists such that
the first list contains the initial consecutive integers `(1 2 3)'
and the second contains the remaining elements `(5 7)'.  We expect
`(split-at-predicate (lambda (x y) (= (- y x) 1)) '(1 2 3 5 7))'
to return `((1 2 3) . (5 7))', but in fact it returns `((1 2 3 5 7))'
because of this erroneous assumption.

scm/lily-library.scm

index 4a7973abb1b39e1447cd3ea2e79fe44d7715ff32..572972169f0d45687a4e7b0c03e50259a4be3a85 100644 (file)
   Example: (split-at-predicate < '(1 2 3 2 1)) ==> ((1 2 3) . (2 1))"
   (if (null? lst)
       (list lst)
-      (let ((i (list-index pred (cdr lst) lst)))
+      (let ((i (list-index (lambda (x y) (not (pred x y)))
+                          lst
+                          (cdr lst))))
         (if i
             (cons (take lst (1+ i)) (drop lst (1+ i)))
             (list lst)))))