2016-12-11 8 views
1

Chapter 5, Exercise 3連想イン機能を実装する必要があります。のClojure:ブレイブと真のためにはClojureで

を連想イン機能を実装します。ヒント:assoc関数を使用し、そのパラメータを[m [k & ks] v]と定義します。

このsolution(39行目〜39行目を参照)が見つかりましたが、別の方法があるかと思いました。前回の練習をしているとき、私はimplementing the comp functionのjbmによって非常に明確な答えを見つけました。私は、キーの連接リストの上に部分的な連想を削減し、最終値に戻った関数を適用しようとしてきた

:回答

(defn my-part-assoc [m k] 
    (partial assoc m k)) 

((reduce my-part-assoc {} [:one :two :three]) "val") 

言うまでもなくを、これは動作しません。私はClojureと関数型プログラミングと新規のための私の非常に基本的な理解の減少は、間違った道を私を導いています。誰かがより簡潔な答えを提供できますか?

答えて

2

まもなく投稿した後、私はClojure GitHub repoから次の定義を取得した、thisが見つかりました:

(defn assoc-in 
    ;; metadata elided 
    [m [k & ks] v] 
    (if ks 
    (assoc m k (assoc-in (get m k) ks v)) 
    (assoc m k v))) 
+0

私は、これは複製を構成しているかはわかりません。私はスタックオーバーフローで私の答えを見つけましたが、私はそれが非常に具体的であり、同じ位置に他の人を助けるかもしれないので、私の質問をアクティブにしました。 – Ooberdan

+0

注意:コアバージョンと違って、あなたはこれで失敗します: '(assoc-in {} [:a:b:c] 1)' ... – leetwinski

+0

いいえ、@leetwinskiはうまくいきます。 – amalloy