2009/11/10 Thomas <[email protected]>: > 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 | 4 +++- > 1 files changed, 3 insertions(+), 1 deletions(-) > > diff --git a/scm/lily-library.scm b/scm/lily-library.scm > index adb2bdf..1624288 100644 > --- a/scm/lily-library.scm > +++ b/scm/lily-library.scm > @@ -343,7 +343,9 @@ found." > 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))))) > -- > 1.6.0.4
Thanks for fixing this regression, Thomas. I guess we might have noticed it earlier if the example in the docstring hadn't been changed. :) Regards, Neil _______________________________________________ bug-lilypond mailing list [email protected] http://lists.gnu.org/mailman/listinfo/bug-lilypond
