- (let* ((d1 (ancestor-distance shared anc1))
- (d2 (ancestor-distance shared anc2))
- (dtotal (+ d1 d2)))
- (declare (fixnum d1 d2 dtotal))
- (when (< dtotal min)
- (setq min dtotal
- cui-min shared))))
- (values min cui-min))))
-
-(defun cdist (c1 c2 &key sab include-rb)
- (let* ((anc1 (ucon-ancestors c1 :sab sab :include-rb include-rb))
- (anc2 (ucon-ancestors c2 :sab sab :include-rb include-rb)))
- (multiple-value-bind (min cui)
- (cdist-ancestors anc1 anc2)
+ (multiple-value-bind (d1 p1) (ancestor-distance shared anc1)
+ (multiple-value-bind (d2 p2) (ancestor-distance shared anc2)
+ (let ((dtotal (+ d1 d2)))
+ (declare (fixnum d1 d2 dtotal))
+ (when (< dtotal min)
+ (format t "~D ~D ~D ~S ~S~%" d1 d2 dtotal p1 p2)
+ (setq min dtotal
+ cui-min shared
+ path-min (append p1 (cdr (reverse p2)))
+ ))))))
+ (values min cui-min path-min))))
+
+(defun cdist-metric (c1 c2 &key sab include-rb full-ucon (srl *current-srl*))
+ (let* ((anc1 (ucon-ancestors c1 :sab sab :include-rb include-rb :full-ucon full-ucon :srl srl))
+ (anc2 (ucon-ancestors c2 :sab sab :include-rb include-rb :full-ucon full-ucon :srl srl)))
+ (multiple-value-bind (min cui path)
+ (cdist-ancestors (list* c1 anc1) (list* c2 anc2))