我試圖閱讀了關於Clojure的有點這個Clojure的化妝加法器的例子,但我撞到南牆以下基本例如:不能理解
(defn make-adder [x]
(let [y x]
(fn [z] (+ y z))))
(def add2 (make-adder 2))
(add2 4)
-> 6
我不明白add2
是如何將數字4傳遞給make-addder函數的,以及該函數如何將該數字賦給z。
在此先感謝!
我試圖閱讀了關於Clojure的有點這個Clojure的化妝加法器的例子,但我撞到南牆以下基本例如:不能理解
(defn make-adder [x]
(let [y x]
(fn [z] (+ y z))))
(def add2 (make-adder 2))
(add2 4)
-> 6
我不明白add2
是如何將數字4傳遞給make-addder函數的,以及該函數如何將該數字賦給z。
在此先感謝!
make-adder
返回帶有一個參數(z)的函數,傳入make-adder
的參數用於爲y賦值。 add2
被設置爲等於具有2所以add2
的參數評估make-adder
的結果被設定爲等於從make-adder
,它(因爲y已經被分配給所述參數從make-adder
)返回的函數看起來像
(fn [z] (+ 2 z))
所以(add2 4)
稱這個函數的計算結果爲6.這有幫助嗎?
對我來說,看來你正在研究一個有趣的問題。
你的榜樣使加法器功能(不let綁定重寫)
(defn make-adder [x]
"Returns a function that returns the sum of x and yet to be supplied z."
(fn [z] (+ z x))))
返回總結x和z,其中使加法器必須已經調用值的函數。我相信你的例子是實現Clojure部分函數,這非常酷。
這裏是重寫來總結它的兩個參數,而不是返回一個函數(所以我們可以使用ADD2部分)你的化妝加法器功能,
(defn make-adder
"Returns sum of x and y."
[x y]
(+ x y))
,這裏是使用部分與2作爲ADD2改寫x參數:
(def add2 (partial make-adder 2))
如果我打電話(add2 2)
答案是4,(add2 3)
,答案是5等。
感謝您的額外解釋。我對clojure還很陌生,因此我不熟悉「部分」概念。這就是爲什麼我完全理解你的例子有點困難。 – Deleteman
完美!是的,它有幫助!非常感謝! – Deleteman
我不認爲let甚至需要它使代碼複雜 – Kevin
@Kevin:對,let在這裏沒有用處。 –