7
我在做Intro to Functions的問題,但我不太明白是怎麼回事? 4個表達式如何不同?如果它們都一樣,爲什麼有4種不同的語法?Clojure函數文字
(partial + 5)
#(+ % 5)
(fn [x] (+ x 5))
(fn add-five [x] (+ x 5))
我在做Intro to Functions的問題,但我不太明白是怎麼回事? 4個表達式如何不同?如果它們都一樣,爲什麼有4種不同的語法?Clojure函數文字
(partial + 5)
#(+ % 5)
(fn [x] (+ x 5))
(fn add-five [x] (+ x 5))
(fn [x] (+ x 5))
和#(+ % 5)
- 這兩個是完全等價的,後者只使用dispatch macro使代碼更簡潔。對於短的函數,#()
語法通常是首選,而(fn [x])
語法對於稍長的函數更好。另外,如果您有嵌套的匿名函數,則不能使用#()
,因爲這會造成不確定性。
(fn add-five [x] (+ x 5))
- 與上述兩者相同,只是它有一個名稱:add-five。這有時可能是有用的,就像你需要遞歸調用你的函數一樣。*
(partial + 5)
- 在clojure中,+
是一個可變參數函數。這意味着它可以接受任意數量的參數。 (+ 1 2)
和(+ 1 2 3 4 5 6)
都是完全有效的形式。 partial
正在創建一個與+
相同的新函數,但第一個參數始終爲5.因此,((partial + 5) 3 3 3)
是有效的。在這種情況下,您無法使用其他表格。*從尾部位置進行遞歸調用時,應該使用recur
,但這並非總是可行。