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