(define (resolve-inherit-entry-in-list alist entry)
  (let* ((key (car entry))
        (attributes (cdr entry))
        (inherits (assoc-ref attributes "inherits")))
    (if inherits
      (let* ((alist-without-entry (alist-delete key alist))
            (inherit-entry (assoc inherits alist-without-entry))
            (inherits-attributes (if inherit-entry (alist-copy (cdr (resolve-inherit-entry-in-list alist-without-entry inherit-entry)))))
            (override-attributes (alist-delete "inherits" attributes)))
        (if inherit-entry
          (begin
            (for-each (lambda (attribute) (assoc-set! inherits-attributes (car attribute) (cdr attribute))) override-attributes)
            (cons key inherits-attributes)
          )
          (ly:error "~a can not inherit from ~a" key inherits))
      )
      entry
    )))

(define (resolve-inherits alist)
  (map (lambda (entry) (resolve-inherit-entry-in-list alist entry)) alist)
)