私は Clojure の学習曲線を取得しようとしています。特定の文字列の順列のリストを出力する単純なプログラムを作成しています。私の再帰的ソリューションは、それ自体を複数回呼び出します (1-D スタックではなく呼び出しツリーが存在するように)。リストを指定すると、関数を複数回呼び出して、呼び出しごとにリストから1つの要素を与える方法を理解しようとしています。私の現在のコードは
(def permuteCat (
fn [string printlist appendval]
( permute string (concat printlist (list appendval)) )
))
(def permuteRecurse (
fn [string printlist appendlist]
(
map (partial permuteCat string printlist) appendlist
)
))
(def permute (
fn [string printlist]
(if ( == (count printlist) (.length string) )
(println printlist)
( permuteRecurse string printlist ( range (- (.length string) (count printlist)) ) )
)
)
)
ただし、permuteCat() が permuteRecurse() によって呼び出されることはないようです。OCaml のような言語では permuteCat をカリー化して map 演算子を使用しますが、Clojure がカリー化をネイティブにサポートしていないことは理解しています。これを行うための好ましい方法は何ですか? それとも、私はベースから外れており、まったく異なるアプローチを取る必要がありますか?