slightly faster merge-se added by Bunny351 on Sat Jan 6 15:31:35 2018

 
-(define (merge-se . ses)		; later occurrences take precedence to earlier ones
-  (let ((se (apply append ses)))
-    (dm "merging " (length ses) " se's with total length of " (length se))
-    (let ((se2
-	   (let loop ((se se))
-	     (cond ((null? se) '())
-		   ((assq (caar se) (cdr se)) (loop (cdr se)))
-		   (else (cons (car se) (loop (cdr se))))))))
-      (dm "  merged has length " (length se2))
-      se2)))
-
+(define (merge-se . ses)		; later occurrences take precedence
+  (let bwd ((ses ses))
+    (if (null? ses)
+        '()
+        (let fwd ((se (car ses))
+                  (rest (bwd (cdr ses))))
+          (cond ((null? se) rest)
+                ((assq (caar se) rest) (fwd (cdr se) rest))
+                (else (cons (car se) (fwd (cdr se) rest))))))))
+