我有下面的函數定義地圖編輯爲什麼Clojure的給這個參數數量錯誤
(def map-edit
(fn [m lst k f]
(if (car lst)
(assoc m
(car lst)
(map-edit (get m (car lst) {}) k f))
(assoc m k (f (get m k))))))
當我嘗試調用這個函數在我REPL
(map-edit {} (list "oeu") "oeuoeu" (fn [q] "oeu"))
我得到的元數錯誤
ArityException Wrong number of args (3) passed to: core/map-edit clojure.lang.AFn.throwArity (AFn.java:429)
爲什麼它認爲我只傳遞3個參數?
; CIDER 0.8.2 (Java 1.8.0_121, Clojure 1.8.0, nREPL 0.2.12)
正如一個側面說明 - 它看起來像你正試圖重新實現'clojure.core'的功能'更新in' - 它可能對你會有所幫助看[在它的源代碼](https://github.com/clojure/clojure/blob/clojure-1.9.0-alpha14/src/clj/clojure/core.clj#L6054)作爲這種類型的例子遞歸通常在Clojure中完成。 –
@AlephAleph你是完全正確的。感謝您的鏈接和評論(使用update-in應該是被接受的答案) – SultanLegend