Escribí una función para calcular la diferencia simétrica de dos conjuntos (uno de los problemas en el sitio 4clojure). La función pasó las pruebas unitarias, pero no está tan limpia como me gustaría, dado que tengo código duplicado.¿Cómo puedo definir una función dentro de una función en Clojure y hacer referencia a esa función?
(fn [x y] (set (concat
(keep-indexed #(if (nil? (get y %2)) %2) x)
(keep-indexed #(if (nil? (get x %2)) %2) y))))
Obviamente yo preferiría algo así como:
(fn [x y] (set (concat (diff x y) (diff y x))))
donde se define la función de diferencias y de referencia "en línea", pero no sé cómo hacerlo en un bloque fn.
En realidad, puede ver las respuestas de otras personas en 4clojure (una vez que haya completado la pregunta), lo que le dará una idea de cómo puede organizar sus propios intentos. –