Clojure

gdzie (\ys x -> x : ys) i (fn [ys x] (cons x ys)) to funkcje, które zwracają listę ys z elementem x na początku.

Funkcja wyższego rzędu map:

map f = foldr ((:) . f) [] -- Haskell (defn map [f coll] (reduce (fn [ys x] (cons (f x) ys)) () (reverse coll))) ; Clojure

gdzie kropka (.) to operator składania funkcji, a dwukropek (:) to tworzenie listy (cons). Clojure nie posiada funkcji reduce-right/foldr, ale wywołanie reverse przynosi ten sam efekt.

Złączenie napisów, aby uzyskać: "(f 1 (f 2 (f 3 (f 4 (f 5 z)))))" foldr (\x y -> concat ["(f ",x," ",y,")"]) "z" ["1","2","3","4","5"]

Złączenie napisów, aby uzyskać: "(f (f (f (f (f z 1) 2) 3) 4) 5)" foldl (\x y -> concat ["(f ",x," ",y,")"]) "z" ["1","2","3","4","5"]

Zobacz też homomorfizm funkcje wyższego rzędu programowanie funkcyjne

Przypisy

Linki zewnętrzne Przykłady wywołań funkcji fold w Haskellu "Funkcje wyższego rzędu — map, fold i filter"

"Opis funkcji fold" Różnice pomiędzy foldr a foldl. "Constructing List Homomorphism from Left and Right Folds"

Kategoria:Programowanie komputerów