|
28 | 28 | ;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
29 | 29 | ;;; |
30 | 30 |
|
| 31 | +#!nounbound |
31 | 32 | (library (srfi :114 comparators) |
32 | 33 | (export comparator? comparator-comparison-procedure? |
33 | 34 | comparator-hash-function? |
|
390 | 391 | (if (zero? index) |
391 | 392 | result |
392 | 393 | (let* ((prod (mod (* result 33) +limit+)) |
393 | | - (sum (mod (+ prod (hash (ref x index)) +limit+)))) |
| 394 | + (sum (mod (+ prod (hash (ref x index))) +limit+))) |
394 | 395 | (loop (- index 1) sum)))))) |
395 | 396 |
|
396 | 397 | (define (make-listwise-comparator test comparator nil? kar kdr) |
|
448 | 449 | (define (make-cdr-comparator comparator) |
449 | 450 | (make-comparator |
450 | 451 | pair? #t |
451 | | - (lambda (a b) (comparator-compare (cdr a) (cdr b))) |
| 452 | + (lambda (a b) (comparator-compare comparator (cdr a) (cdr b))) |
452 | 453 | (lambda (obj) (comparator-hash comparator (cdr obj))))) |
453 | 454 |
|
454 | 455 | (define (make-pair-comparison car-comparator cdr-comparator) |
|
549 | 550 | (let loop ((comparator (matching-comparator a comparators)) |
550 | 551 | (first? #t)) |
551 | 552 | (if comparator |
552 | | - (if (comparator-equal? a b) |
553 | | - (loop (matching-comparator a comparators) #f) |
| 553 | + (if (comparator-equal? comparator a b) |
| 554 | + (loop (matching-comparator a (remq comparator comparators)) #f) |
554 | 555 | #f) |
555 | 556 | (or (not first?) |
556 | 557 | (error 'refined-equality-predicate |
|
561 | 562 | (let loop ((comparator (matching-comparator a comparators)) |
562 | 563 | (first? #t)) |
563 | 564 | (if comparator |
564 | | - (let ((result (comparator-compare a b))) |
| 565 | + (let ((result (comparator-compare comparator a b))) |
565 | 566 | (if (eqv? result 0) |
566 | | - (loop (matching-comparator a comparators) #f) |
| 567 | + (loop (matching-comparator a (remq comparator comparators)) #f) |
567 | 568 | result)) |
568 | 569 | (if first? |
569 | 570 | (error 'refined-comparison-procedure |
|
616 | 617 | 'comparison 'reflexive)) |
617 | 618 |
|
618 | 619 | (define (check-symmetric-equality comparator a b) |
619 | | - (if (comparator-equal? a b) |
620 | | - (debug-assert (comparator-equal? b a) 'equality 'symmetric)) |
621 | | - (if (not (comparator-equal? a b)) |
622 | | - (debug-deny (comparator-equal? b a) 'equality 'symmetric))) |
| 620 | + (if (comparator-equal? comparator a b) |
| 621 | + (debug-assert (comparator-equal? comparator b a) 'equality 'symmetric)) |
| 622 | + (if (not (comparator-equal? comparator a b)) |
| 623 | + (debug-deny (comparator-equal? comparator b a) 'equality 'symmetric))) |
623 | 624 |
|
624 | 625 | (define (check-asymmetric-comparison comparator a b) |
625 | 626 | (debug-assert (eqv? |
626 | | - (comparator-compare a b) |
627 | | - (- (comparator-compare a b))) |
| 627 | + (comparator-compare comparator a b) |
| 628 | + (- (comparator-compare comparator a b))) |
628 | 629 | 'comparison 'asymmetric)) |
629 | 630 |
|
630 | 631 | (define (check-transitive-equality comparator a b c) |
631 | | - (and (comparator-equal? a b) (comparator-equal? b c) |
632 | | - (debug-assert (comparator-equal? a c) 'equality 'transitive)) |
633 | | - (and (comparator-equal? a b) (not (comparator-equal? b c)) |
634 | | - (debug-deny (comparator-equal? a c) 'equality 'transitive)) |
635 | | - (and (not (comparator-equal? a b)) (comparator-equal? b c) |
636 | | - (debug-deny (comparator-equal? a c) 'equality 'transitive))) |
| 632 | + (and (comparator-equal? comparator a b) (comparator-equal? comparator b c) |
| 633 | + (debug-assert (comparator-equal? comparator a c) 'equality 'transitive)) |
| 634 | + (and (comparator-equal? comparator a b) |
| 635 | + (not (comparator-equal? comparator b c)) |
| 636 | + (debug-deny (comparator-equal? comparator a c) 'equality 'transitive)) |
| 637 | + (and (not (comparator-equal? comparator a b)) |
| 638 | + (comparator-equal? comparator b c) |
| 639 | + (debug-deny (comparator-equal? comparator a c) 'equality 'transitive))) |
637 | 640 |
|
638 | 641 | (define (check-transitive-comparison comparator a b c) |
639 | 642 | (define <= (<=? comparator)) |
|
675 | 678 | (lambda (a b) |
676 | 679 | (check-all comparator a b c c?) |
677 | 680 | (when (not c?) (set! c a) (set! c? #t)) |
678 | | - (comparator-equal? comparator)) |
| 681 | + (comparator-equal? comparator a b)) |
679 | 682 | (if (comparator-comparison-procedure? comparator) |
680 | 683 | (lambda (a b) |
681 | 684 | (check-all comparator a b c c?) |
682 | 685 | (when (not c?) (set! c b) (set! c? #t)) |
683 | | - (comparator-compare comparator)) |
| 686 | + (comparator-compare comparator a b)) |
684 | 687 | #f) |
685 | 688 | (if (comparator-hash-function? comparator) |
686 | 689 | (lambda (obj) |
|
0 commit comments