parece que hay un límite en el número de parámetros que puede tomar una función clojure.¿Por qué hay un límite de 20 parámetros máx. Para una función de clojure
Al definir una función con más de 20 parámetros que recibe lo siguiente:
#<CompilerException java.lang.RuntimeException: java.lang.RuntimeException: java.lang.Exception: Can't specify more than 20 params (NO_SOURCE_FILE:0) (NO_SOURCE_FILE:0)>
Obviamente, esto se puede evitar, pero yo estaba golpeando este límite portar el modelo de ejecución de un DSL existente para clojure, y tengo construcciones en mi DSL como el siguiente, que por la expansión de macros se pueden asignar a funciones con bastante facilidad a excepción de este límite:
(defAlias nn1 ((element ?e1) (element ?e2)) number
"@doc features of the elements are calculated for entry into
the first neural network, the result is the score computed by the latter"
(nn1-recall (nn1-feature00 ?e1 ?e2) (nn1-feature01 ?e1 ?e2) ... (nn1-feature89 ?e1 ?e2)))
que es una declaración DSL para llamar a una red neuronal con 90 nodos de entrada. Puede solucionarlo, por supuesto, pero me preguntaba de dónde viene el límite. Gracias.
Al igual que una nota de interés sobre el estilo: "Code Complete" de Steve McConnell aboga, en parte basado en estudios de eficiencia de programación, que un método nunca debe tener más de 7 argumentos y, más recientemente, el "Código limpio" de Robert C. Martin establece el límite tan bajo como 3. He encontrado 7 una buena regla para decidir cuándo rediseñar una interfaz, mientras que 3 parece un poco extrema. Sí, soy consciente de tus circunstancias especiales con el macro y todo; solo señalando que para el caso "general", 20 es bastante generoso. –
Construye tus neuronas con matrices o algo así y distribúyelas a la función como seqs. Y mapa: ¿reducir los seqs? ¿Algo como esto? http://www.fatvat.co.uk/2009/06/back-propagation-algorithm-in-clojure.html – claj