2013-02-11 5 views
5

Ich habe eine Sequenz:Wie wendet man eine Zwei-Arg-Funktion auf eine Sequenz an?

[a b c ...] 

und eine Funktion (f x y). Ich möchte Folgendes erhalten:

(f c (f b (f a 1))) 

Etc. Wie geht das?

+4

[reduzieren] (http://clojuredocs.org/clojure_core/clojure.core/reduce) –

+0

was ist '1'? Ich kann keinen Weg finden, dies mit 'reduce' zu ​​tun. Kannst du ein Beispiel geben? – yegor256

+0

Klicken Sie auf den Link oben für Beispiele. Der erste Beispielblock zeigt einen Fall der Verwendung von "1" als Anfangswert. –

Antwort

11

reduzieren, mit einer kleinen Anpassung:

(reduce #(f %2 %1) 1 [a b c]) 
+0

@ A.Webb Tatsächlich, und die iterierten Anwendungen von 'f' nehmen die Sequenzelemente als erstes arg, nicht als zweites. –

2
(reduce (fn [acc x] (f x acc)) 1 [a b c d]) 
Verwandte Themen