Es scheint eine Grenze für die Anzahl der Parameter zu geben, die eine Clojure-Funktion annehmen kann.Warum gibt es ein Limit von maximal 20 Parametern für eine Clojure-Funktion
Wenn eine Funktion mit mehr als 20 Parameter definiert, erhalte ich folgendes:
#<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)>
Offensichtlich kann dies vermieden werden, aber ich war Schlagen diese Grenze das Ausführungsmodell eines bestehenden DSL clojure Portierung und ich habe Konstrukte in meinem DSL wie die folgenden, die durch Makroerweiterung kann ganz einfach auf Funktionen zugeordnet werden, außer für diese Grenze:
(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)))
, die eine DSL-Anweisung ist ein neuronales Netz zu nennen mit 90 Eingangsknoten Kann natürlich umgehen, aber ich frage mich, wo das Limit herkommt. Danke.
Gerade als für Interesse Hinweis auf Stil: Steve McConnell „Code Complete“ befürwortet, teilweise Programmiereffizienz Studien basierend auf, dass ein Verfahren soll nie mehr als 7 Argumente hat, und in jüngerer Zeit Robert C. Martin „Clean Code“ setzt das Limit so niedrig wie 3. Ich habe 7 eine gute Faustregel für die Entscheidung, wann ein Interface neu zu konstruieren, gefunden, während 3 scheint ein bisschen extrem. Ja, mir sind Ihre besonderen Umstände mit dem Makro und allem bekannt. Ich weise nur darauf hin, dass 20 für den "allgemeinen" Fall ziemlich großzügig ist. Erstellen Sie Ihre Neuronen mit Arrays oder etwas –
und führen sie die Funktion als ASTA. Und Karte-reduzieren die Seqs? Etwas wie das? http://www.fatvat.co.uk/2009/06/back-propagation-algorithm-in-clojure.html – claj