bug-guile
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bugreport, concise version


From: Han-Wen Nienhuys
Subject: bugreport, concise version
Date: Wed, 21 Jan 2004 01:36:24 +0100

Hi guys,

I consider this a very severe bug. Can you fix this please?


byrd:~/usr/src/lilypond$ guile -l scm/bla.scm
Backtrace:
In unknown file:
   ?: 0* [primitive-load "scm/bla.scm"]
In scm/bla.scm:
 107: 1* [determine-split-list #((1 . 2) (3 . 4)) #((1 . 2) (3 . 4))]
In unknown file:
   ?: 2  Segmentatie fout



bla.scm :


(define ly:moment<? <)

(define-public (determine-split-list ev1 ev2)
  (define (when v i)
    (car (vector-ref v i)))
  (define (what v i)
    (cdr (vector-ref v i)))

  (define chord-threshold 8)

  (define result
    (list->vector
     (map (lambda (x)
            (cons x 'together))
          (merge (map car ev1) (map car ev2) ly:moment<?))))

  (define (analyse-events i1 i2 ri
                          active1
                          active2)

    (define (analyse-span-event active ev)
      (let*
          ((name (ly:get-mus-property ev 'name))
           (key (cond
                 ((equal? name 'SlurEvent) 'slur)
                 ((equal? name 'TieEvent) 'tie)
                 ((equal? name 'Beam) 'beam)
                 (else #f)))
           (sp (ly:get-mus-property span-direction ev)))

        (if (and (symbol? key) (ly:dir? sp))
            ((if (= sp STOP) delete! cons) key active))
        ))       

    (define (put x)
      (set-what (whatever result ri) x))

    (cond
     ((= i1 (vector-length ev1)) (put 'apart))
     ((= i2 (vector-length ev2)) (put 'apart))
     (else
      (let*
          ((m1 (when ev1 i1))
           (m2 (when ev2 i2)))

        (if (not (or (equal? m1 (when result ri))
                     (equal? m2 (when result ri))))
            (scm-error boem))

        (set! active1
              (sort
               (map (lambda (x) (analyse-span-event active1 x))
                    (what ev1 i1)) symbol<?))
        (set! active2
              (sort (map (lambda (x) (analyse-span-event active2 x))
                         (what ev2 i2)) symbol<?))
        
        (cond
         ((ly:moment<? m1 m2)
          (put 'apart)
          (analyse-events (1+ i1) i2 (1+ ri) active1 active2))
         ((ly:moment<? m2 m1)
          (put 'apart)
          (analyse-events i1 (1+ i2) (1+ ri) active1 active2))
         (else
          (if (not (equal? active1 active2))
              (put 'apart)

              (let*
                  ((notes1 (get-note-evs ev1 i1))
                   (pitches1 (sort
                              (map (lambda (x) (ly:get-mus-property x 'pitch)) 
notes1) ly:pitch<?))
                   (notes2 (get-note-evs ev2 i2))
                   (pitches2 (sort
                              (map (lambda (x) (ly:get-mus-property x 'pitch)) 
notes2) ly:pitch<?))
                   )
                (cond
                 ((equal? pitches1 pitches2) (put 'unisono))
                 ((> (length notes1) 1) (put 'apart))
                 ((> (length notes2) 1) (put 'apart))
                 (else
                  (let* ((dif (ly:pitch-diff (car pitches1) (car pitches1))))
                    (if (< (ly:pitch-steps diff) chord-threshold)
                        (put 'chords)
                        (put 'apart))
                    ))))
              ))
         (analyse-events (1+ i1) (1+ i2) (1+ ri) active1 active2)
         )))))


  
  (set! ev1 (list->vector ev1))
  (set! ev2 (list->vector ev2))

  
  (analyse-events 0 0  0 '() '())

  (display result)
  )



(determine-split-list '((1 . 2) (3 . 4)) '((1 . 2) (3 . 4)))



-- 

 Han-Wen Nienhuys   |   address@hidden   |   http://www.xs4all.nl/~hanwen 





reply via email to

[Prev in Thread] Current Thread [Next in Thread]