;;;; source file of the GNU LilyPond music typesetter
;;;;
;;;; (c) 1998--2006 Jan Nieuwenhuizen <janneke@gnu.org>
-;;;; Han-Wen Nienhuys <hanwen@cs.uu.nl>
+;;;; Han-Wen Nienhuys <hanwen@xs4all.nl>
(define-public X 0)
m))
;;;;;;;;;;;;;;;;
-; list
+;; list
+
+
+(define-public (count-list lst)
+ "Given lst (E1 E2 .. ) return ((E1 . 1) (E2 . 2) ... ) "
+ (define (helper l acc count)
+ (if (pair? l)
+ (helper (cdr l) (cons (cons (car l) count) acc) (1+ count))
+ acc))
+
+
+ (reverse (helper lst '() 1)))
+
+(define-public (list-join lst intermediate)
+ "put INTERMEDIATE between all elts of LST."
+
+ (fold-right
+ (lambda (elem prev)
+ (if (pair? prev)
+ (cons elem (cons intermediate prev))
+ (list elem)))
+ '() lst))
+
+(define-public (filtered-map proc lst)
+ (filter
+ (lambda (x) x)
+ (map proc lst)))
+
(define (flatten-list lst)
"Unnest LST"
;;
+(define-public (string-encode-integer i)
+ (cond
+ ((= i 0) "o")
+ ((< i 0) (string-append "n" (string-encode-integer (- i))))
+ (else (string-append
+ (make-string 1 (integer->char (+ 65 (modulo i 26))))
+ (string-encode-integer (quotient i 26))))))
(define-public (ly:numbers->string lst)
(string-join (map ly:number->string lst) " "))
(define-public (car< a b) (< (car a) (car b)))
-
(define-public (symbol<? lst r)
(string<? (symbol->string lst) (symbol->string r)))