Variante funcional de la función 'oneof' en Racket
He escrito la siguiente función para encontrar si una y solo una de las 5 variables es verdadera:
(define (oneof v w x y z)
(or (and v (not w) (not x) (not y) (not z))
(and w (not v) (not x) (not y) (not z))
(and x (not v) (not w) (not y) (not z))
(and y (not v) (not w) (not x) (not z))
(and z (not v) (not w) (not x) (not y)) ))
(xor toma solo 2 argumentos)
Sin embargo, es muy imperativo y no funcional. Además, quiero escribir una función (una de N) que será genérica en lugar de específica para 5 variables. ¿Cómo se puede hacer esto? Gracias.
Editar: Como se señaló en los comentarios, el código es 'repetitivo' y no 'imperativo', aunque la necesidad de su mejora continúa.