From: David Kastrup Date: Fri, 5 Oct 2012 06:52:08 +0000 (+0200) Subject: Simplify hash-table->alist, alist->hash-table, functional-or, functional-and, list... X-Git-Tag: release/2.17.10-1~31 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=98e3cbf231f8a2ec13f4a25d7404b75205d3046e;p=lilypond.git Simplify hash-table->alist, alist->hash-table, functional-or, functional-and, list-element-index --- diff --git a/scm/lily-library.scm b/scm/lily-library.scm index fdd8cbfd3d..cd9fb5b9a2 100644 --- a/scm/lily-library.scm +++ b/scm/lily-library.scm @@ -471,30 +471,23 @@ For example: ;; hash (define-public (hash-table->alist t) - (hash-fold (lambda (k v acc) (acons k v acc)) - '() t)) + (hash-fold acons '() t)) ;; todo: code dup with C++. (define-safe-public (alist->hash-table lst) "Convert alist to table" (let ((m (make-hash-table (length lst)))) - (map (lambda (k-v) (hashq-set! m (car k-v) (cdr k-v))) lst) + (for-each (lambda (k-v) (hashq-set! m (car k-v) (cdr k-v))) lst) m)) ;;;;;;;;;;;;;;;; ;; list (define (functional-or . rest) - (if (pair? rest) - (or (car rest) - (apply functional-or (cdr rest))) - #f)) + (any identity rest)) (define (functional-and . rest) - (if (pair? rest) - (and (car rest) - (apply functional-and (cdr rest))) - #t)) + (every identity rest)) (define (split-list lst n) "Split LST in N equal sized parts" @@ -512,14 +505,7 @@ For example: (helper lst (make-vector n '()) (1- n))) (define (list-element-index lst x) - (define (helper todo k) - (cond - ((null? todo) #f) - ((equal? (car todo) x) k) - (else - (helper (cdr todo) (1+ k))))) - - (helper lst 0)) + (list-index (lambda (m) (equal? m x)))) (define-public (count-list lst) "Given @var{lst} as @code{(E1 E2 .. )}, return