W programowaniu funkcjonalnym zwinięcie, znane również jako redukcja, akumulacja lub katamorfizm, jest rodzajem funkcji wyższego rzędu, która rekurencyjnie stosuje transformację do struktury danych, „zwijając” ją do wartości sumarycznej
Nauczyłem się podstawowej różnicy między foldLeftireduceLeft foldLeft: wartość początkowa musi zostać przekazana zmniejszLeft: przyjmuje pierwszy element kolekcji jako wartość początkową zgłasza wyjątek, jeśli kolekcja jest pusta Czy jest jakaś inna różnica? Czy jest jakiś konkretny powód, aby mieć dwie metody o podobnej funkcjonalności?
Kiedy należy używać reduceLeft, reduceRight, foldLeft, foldRight, scanLeftlub scanRight? Chcę intuicji / przeglądu ich różnic - być może z kilkoma prostymi przykładami.
Po pierwsze, Real World Haskell , który czytam, mówi, żeby nigdy nie używać foldli zamiast tego używać foldl'. Więc ufam temu. Ale jestem zamglona, gdy w użyciu foldrw porównaniu foldl'. Chociaż widzę strukturę ich działania inaczej ułożoną przede mną, jestem zbyt głupi, by zrozumieć, kiedy „co jest lepsze”. Wydaje mi …
Kod funkcji myAny w tym pytaniu używa foldr. Przestaje przetwarzać nieskończoną listę, gdy predykat jest spełniony. Przepisałem to używając foldl: myAny :: (a -> Bool) -> [a] -> Bool myAny p list = foldl step False list where step acc item = p item || acc (Zwróć uwagę, że argumenty …
Próbuje dowiedzieć się F #, ale irytować, gdy próbuje odróżnić krotnie i zmniejszyć . Fold wydaje się robić to samo, ale ma dodatkowy parametr. Czy istnieje uzasadniony powód, dla którego te dwie funkcje istnieją, czy też mają one służyć osobom z różnych środowisk? (Np .: ciąg i ciąg w C …
Jaki jest najbardziej idiomatyczny sposób osiągnięcia czegoś takiego w Haskellu: foldl (+) 0 [1,2,3,4,5] --> 15 Lub jego odpowiednik w Rubim: [1,2,3,4,5].inject(0) {|m,x| m + x} #> 15 Oczywiście Python udostępnia reducefunkcję, która jest implementacją fold, dokładnie tak, jak powyżej, jednak powiedziano mi, że „pythonowym” sposobem programowania jest unikanie lambdaterminów …
Zdaję sobie sprawę, że zagięcie w lewo tworzy drzewa pochylone w lewo, a zagięcie w prawo tworzy drzewa pochylone w prawo, ale kiedy sięgam po fałd, czasami zapadam się w myśl wywołującą ból głowy, próbując określić, który rodzaj fałdu jest odpowiednie. Zwykle kończę rozwijanie całego problemu i przechodzenie przez implementację …
W Real World Haskell , rozdział 4. o programowaniu funkcjonalnym : Napisz foldl z foldr: -- file: ch04/Fold.hs myFoldl :: (a -> b -> a) -> a -> [b] -> a myFoldl f z xs = foldr step id xs z where step x g a = g (f a …
W Real World Haskell, rozdział 4, strona 98 druku, pyta się, czy wordsmożna go wdrożyć za pomocą foldów, i to też jest moje pytanie: Czy to możliwe? Jeśli nie to dlaczego? Jeśli tak, to w jaki sposób? Wymyśliłem następujące, które są oparte na pomyśle, że każde spacje powinny być poprzedzone …
Zamknięte . To pytanie musi być bardziej skoncentrowane . Obecnie nie przyjmuje odpowiedzi. Chcesz poprawić to pytanie? Zaktualizuj pytanie, aby skupiało się tylko na jednym problemie, edytując ten post . Zamknięte 7 miesięcy temu . Ostatnio próbuję użyć Haskell w moim prawdziwym systemie produkcji skrzynek. System typów Haskell naprawdę oferuje …
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.