0
我是一個真正的clojure新手。 我有這個這裏有哪些參數?
(defn max-val [x & xs]
(reduce #(if (< %1 %2) %2 %1) (flatten (cons x xs))))
哪個是%1和%2參數? 據我所知,
(flatten (cons 1 2 3)
將返回一個懶序列,使得只有一個參數的#()函數
我是一個真正的clojure新手。 我有這個這裏有哪些參數?
(defn max-val [x & xs]
(reduce #(if (< %1 %2) %2 %1) (flatten (cons x xs))))
哪個是%1和%2參數? 據我所知,
(flatten (cons 1 2 3)
將返回一個懶序列,使得只有一個參數的#()函數
讓我們來看看the docs爲reduce
(reduce f coll) (reduce f val coll)
˚F應該是2個參數的函數。如果未提供val,則 返回將結果應用於coll中的前2項,然後 將f應用於該結果和第3項等。如果coll不包含 項,則f必須不接受任何參數那麼,並減少返回 結果調用f沒有參數。如果coll只有1個項目,則返回 ,並且不調用f。如果提供了val,則返回將結果應用於val和coll中的第一項的 結果,然後 將f應用於該結果以及第二項等。如果coll不包含 項,則返回val和f不會被調用。
因此,它將函數應用於列表中的下一個項目以及前一個調用的結果(第一次使用列表中的前兩個項目)。
想象一下,你打電話給你的功能是這樣的:
(reduce #(if (< %1 %2) %2 %1) '(1 2 3 4))
它將首先與1
和2
被調用,返回2
。然後將調用結果2
和下一個項目3
,並返回3
。然後調用結果3
和下一個項目4
,並返回4
作爲最終結果。
每一步都將先前調用的結果作爲下一次的第一個參數。
你問如何使用減少?或者你問如何使用#(...%...%1 ...%n ...)語法構建匿名函數? –
'(cons 1 2 3)'根本不會返回一個懶惰的seq:給'cons'多於2個參數是錯誤的,或者第二個參數不是順序的。 – amalloy