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.

Respuestas a la pregunta(3)

Su respuesta a la pregunta