From caf6f697cc296afe42de14fc7296e3a27f8e1cf9 Mon Sep 17 00:00:00 2001 From: Thomas Morgan Date: Thu, 12 Nov 2009 20:07:58 +0000 Subject: [PATCH] Fix `split-at-predicate' in `scm/lily-library.scm'. 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 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scm/lily-library.scm b/scm/lily-library.scm index 4a7973abb1..572972169f 100644 --- a/scm/lily-library.scm +++ b/scm/lily-library.scm @@ -362,7 +362,9 @@ 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))))) -- 2.39.5