Arvydas, would you mind reviewing Peter's diff?
Thanks.
On 2026-04-02, Peter McGoron <xxxxxx@mcgoron.com> wrote:
> Here is a patch that applies Rutger's fixes and changes the tests. (The implementation also didn't return `#f` when applying `(disjoin)`, and that is fixed too.)
>
> All tests pass in Chibi.
>
> diff --git a/srfi-235-test.scm b/srfi-235-test.scm
> index 153686d..240e958 100644
> --- a/srfi-235-test.scm
> +++ b/srfi-235-test.scm
> @@ -86,16 +86,19 @@
> "conjoin"
>
> (test-assert
> - ((conjoin number? exact?)))
> + ((conjoin number? exact?) 1))
>
> (test-assert
> - ((conjoin number? exact?) 1 2))
> + ((conjoin eqv? equal?) 1 1))
>
> (test-assert
> - (not ((conjoin number? exact?) 1 2.)))
> + (not ((conjoin equal? eq?) (list 1) (list 1))))
>
> (test-assert
> - ((conjoin) 1 2)))
> + (not ((conjoin number? exact?) 2.)))
> +
> + (test-assert
> + ((conjoin))))
>
>
>
> @@ -103,16 +106,19 @@
> "disjoin"
>
> (test-assert
> - ((disjoin number? string?)))
> + ((disjoin number? string?) 1))
> +
> + (test-assert
> + ((disjoin eqv? equal?) (list 1) (list 1)))
>
> (test-assert
> - ((disjoin number? string?) 1 "a"))
> + ((disjoin number? string?) "a"))
>
> (test-assert
> - (not ((disjoin number? string?) 'a 'b)))
> + (not ((disjoin number? string?) 'a)))
>
> (test-assert
> - (not ((disjoin) 1 2))))
> + (not ((disjoin)))))
>
>
>
> diff --git a/srfi/235-impl.scm b/srfi/235-impl.scm
> index 3ba6a95..23554bf 100644
> --- a/srfi/235-impl.scm
> +++ b/srfi/235-impl.scm
> @@ -23,30 +23,12 @@
> (proc obj2)))
>
> (define (conjoin . predicates)
> - (case-lambda
> - (() #t)
> - (args (let loop-args ((args args))
> - (if (null? args)
> - #t
> - (let ((arg (car args)))
> - (let loop-preds ((predicates predicates))
> - (cond
> - ((null? predicates) (loop-args (cdr args)))
> - ((not ((car predicates) arg)) #f)
> - (else (loop-preds (cdr predicates)))))))))))
> + (lambda args
> + (every (lambda (proc) (apply proc args)) predicates)))
>
> (define (disjoin . predicates)
> - (case-lambda
> - (() #t)
> - (args (let loop-args ((args args))
> - (if (null? args)
> - #t
> - (let ((arg (car args)))
> - (let loop-preds ((predicates predicates))
> - (cond
> - ((null? predicates) #f)
> - (((car predicates) arg) (loop-args (cdr args)))
> - (else (loop-preds (cdr predicates)))))))))))
> + (lambda args
> + (any (lambda (proc) (apply proc args)) predicates)))
>
> (define (each-of . procs)
> (lambda args
>
>
>