A veces me ha parecido conveniente en Clojure definir versiones de funciones de aridad reducida, que devuelven una función parcial, p.Definición de funciones parciales de aria reducida
(defn prefix
([pre string]
(str pre ":" string))
([pre]
(fn [string]
(prefix pre string))))
Esto significa que se puede hacer ya sea:
(prefix "foo" 78979)
=> "foo:78979"
((prefix "foo") 78979)
=> "foo:78979"
Esto parece bastante Haskell-ish y evita la necesidad de partial
para crear funciones parciales.
¿Pero se considera que es un buen diseño de API/estilo de codificación en Lisp?
Esto es currying, ¿sí? Parece útil. Y creo que la interfaz aquí podría mejorarse. Sería bueno si pudieras hacer esta técnica genérica; es decir, para funciones con todas las palabras clave, si llama a esa función con un conjunto incompleto de palabras clave, devuelve un cierre que acepta todas las palabras clave restantes. Si se consumen todas las palabras clave, obtendrá el valor de la función. Pude ver que esto se usa como una técnica de optimización. –
Creo que sigue siendo ideomático si nombras parciales para legibilidad cuando los defines así: (def prefix (partial ...)) Así que tiene los dos: Un nombre para referirse y es explícito.Tenga en cuenta que no utiliza defn ahora pero def-partial está creando la función para usted – KIMA