clojure 関数が取ることができるパラメーターの数には制限があるようです。
20 を超えるパラメーターを持つ関数を定義すると、次のメッセージが表示されます。
#<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)>
明らかにこれは回避できますが、私は既存の DSL の実行モデルを clojure に移植することでこの制限に達していました。私の DSL には次のような構造があり、マクロ展開により、この制限を除いて非常に簡単に関数にマップできます。
(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)))
これは、90 個の入力ノードを持つニューラル ネットワークを呼び出す DSL ステートメントです。もちろん回避できますが、制限がどこから来るのか疑問に思っていました。ありがとう。