# [plt-scheme] eq? with more than two arguments

 From: Jos Koot (jos.koot at telefonica.net) Date: Sun Apr 13 04:27:44 EDT 2008 Previous message: [plt-scheme] eq? with more than two arguments Next message: [plt-scheme] input requested from people who care about licenses of scheme libraries Messages sorted by: [date] [thread] [subject] [author]

```I don't know why. But it easy to make them yoyrself.
Below a procedure and a macro version.

; Let R be a transitive relation (R x y) --> Boolean,
; accepting all x and y of some type alpha.

; Procedure: (binary->plural-relation R) --> procedure: plural relation

; Procedure: (plural-relation x y z ...) --> Boolean
; where x and y and each z is of type alpha.
; #t iff (and (R x y) (R y z) (R y z) ... (R y[n-1] y[n]))

(define (binary->plural-relation R)
(define (plural-relation x y . z)
(and (R x y)
(or (null? z) (apply plural-relation y z))))
plural-relation)

; Examples:

(define eqv?* (binary->plural-relation eqv?))
(eqv?* 1 1) ;--> #t
(eqv?* 1 1 1) ;--> #t
(eqv?* 1 1 1 1 1) ;--> #t
(eqv?* 1 2) ;--> #f
(eqv?* 1 1 2) ;--> #f
(eqv?* 1 1 1 1 2) ;--> #f
(eqv?* 1 1 2 3 3) ;--> #f
; (eqv?* '1) ;--> error, eqv?* wants at least two arguments.

; All arguments of eqv?* are evaluated.
; By means of a macro, evaluation of arguments whose values are not needed
; can be avoided.

(define-syntax define-plural-relation
(syntax-rules ()
((_ R* R)
(define-syntax R*
(syntax-rules ()
((_ x y) (R x y))
((_ x y z (... ...)) (and (R x y) (R* y z (... ...)))))))))

(define-plural-relation eqv?** eqv?)
; Check that 3 is not written!
(eqv?** 1 1) ;--> #t
(eqv?** 1 1 1) ;--> #t
(eqv?** 1 1 1 1 1) ;--> #t
(eqv?** 1 2 (write 3)) ;--> #f
(eqv?** 1 1 2) ;--> #f
(eqv?** 1 1 1 1 2 (write 3)) ;--> #f
(eqv?** 1 1 2 (write 3) (write 3)) ;--> #f

Jos

----- Original Message -----
From: "Doug Orleans" <dougorleans at gmail.com>
To: <plt-scheme at list.cs.brown.edu>
Sent: Saturday, April 12, 2008 9:44 PM
Subject: [plt-scheme] eq? with more than two arguments

> How come =, char=?, string=?, etc allow more than two arguments, but not
> eq?, eqv?, and equal??
>
> --dougorleans at gmail.com
> _________________________________________________
>  For list-related administrative tasks:
>  http://list.cs.brown.edu/mailman/listinfo/plt-scheme

```

 Posted on the users mailing list. Previous message: [plt-scheme] eq? with more than two arguments Next message: [plt-scheme] input requested from people who care about licenses of scheme libraries Messages sorted by: [date] [thread] [subject] [author]