clojureの経験がまったくなく、大学時代から関数型プログラミングの練習がないので、サンプルコードを解釈してclojureの構文を理解しようとしています。
私はフィボナッチのいくつかのバージョン(https://gist.github.com/pcalcao/ea4176719d778ea3ab9e)をコーディングすることから始めましたが、それでも、より複雑な形式を完全に理解しているとは言えません。
たとえば、これは次のとおりです。
(defn fib_map [n]
(last (take (+ n 1)
(map first (iterate (fn [[a b]] [b (+ a b)]) [0 1])))))
私はこのコードの最も内側の部分を本当に理解するのに苦労しています:
fn [[a b]] [b (+ a b)]
今、私の理解から、1つのパラメーター、2つの値を持つベクトル(これは破壊的ですよね?)を受け取り、別のベクトルを返す無名関数を作成しています。
さて、次の代わりにこれを行う理由は何ですか?
fn [a b] [b (+ a b)]
これらは同等ですか?それとも、無名関数がで使用する「ギミック」として単一のパラメーターを受け取るようにするだけiterate
ですか?
これが完全に明白であるならば申し訳ありませんが、私が言ったように、Lispのような言語はまだ私の強みではありません。