Talk:Fold (higher-order function)

message: As partially noted below, the article was rather terrible, containing numerous severe errors. (buggy scheme code, foldl and foldr being confused with respect to lazy evaluation, associativity and commutativity being confused, etc.) I've rewritten it and extended it somewhat. It is mildly Haskell-centric as far as the examples go, but Haskell can very well be treated as functional pseudocode, and very little of the content is really particular to Haskell, but applies to most any language supporting higher-order functions.
-- Cgibbard 02:22, 21 October 2006 (UTC)
replies: text: Totally AGREE!!!!! But how to prevent that the bot does not revert the changes. It happened to me in other articles with minor changes. Changing everything, I wont do it, it is very annoying to be reverted automatically.  — Preceding unsigned comment added by 2806:107E:C:B556:218:DEFF:FE2B:1215 (talk) 08:58, 15 August 2018 (UTC)
thread_title:  Rewrite 

message: I see, the paragraph about foldl and foldr has nicely the facts correct and conclusions all wrong, but I don't want to think about the correct examples right now. 
Concatenation is not commutative, right, but it still doesn't matter whether foldl or foldr is used, because concatenation is still associative.
Foldr "starts" from the right, right, but that's still the correct fold for infinite lists because the lazy processing starts to produce co-data from the "end" (outer scope). You can try with
 foldr (:) [] [1..]
 foldr (&&) True ([True,False] ++ repeat True) 
--TuukkaH 01:40, 27 August 2006 (UTC)
thread_title:  foldl and foldr 

message: Could someone add more HOFs into Wikipedia ?
For example, filter is missing - http://en.wikipedia.org/wiki/Talk:Filter_%28software%29
For example, map is missed (mentioned, but not described anyhow) —The preceding unsigned comment was added by 212.176.32.19 (talk) 09:12, 15 May 2007 (UTC)
replies: text: See Map (higher-order function). — Tobias Bergemann 08:46, 21 May 2007 (UTC)
replies: text: At this time map was added, here is the other that you asked: filter p = foldr (\x y->if p x then x:y else y) []  — Preceding unsigned comment added by 2806:107E:C:B556:218:DEFF:FE2B:1215 (talk) 08:51, 15 August 2018 (UTC)
thread_title:  other high-order functions ? 

message: Should the article mention that Guido wants to remove reduce from Python with the next great revision or would this be off topic? — Tobias Bergemann 11:46, 30 May 2007 (UTC)
replies: text: This, of course, isn't the case. As indicated by the Python (3) example, reduce was moved to functools, not removed — Masklinn (talk) 13:15, 9 October 2009 (UTC)
thread_title:  Python 

message: Shouldn't there be some discussion of how folds apply to other data structures than linked lists (trees, etc)? I don't really know enough to make the edits, but I'm sure I've seen something about folding trees somewhere. 79.72.112.167 (talk) 22:06, 3 February 2008 (UTC)
replies: text: Just parameterize the constructors of the data type, and replace each constructor by the corresponding parameter.
Well, that does fall under Catamorphism already...
99.247.248.73 (talk) 20:09, 9 August 2008 (UTC)
thread_title:  Data structures other than linkd lists 

message: can someone rewrite it in the 'plain' language, which would be understandable to non technical people.
moving an example from the beginning 'Folds on lists' to the introduction would be nice.
216.80.119.92 (talk) 01:37, 23 August 2008 (UTC)
thread_title:  introduction 

message: Foldrn implementation in Folds_for_non-empty_lists can be seen in Amazon's preview of the cited book. Is it enough to allow its inclusion here, or is it still considered copivio? -- WillNess (talk) 16:17, 15 November 2011 (UTC)
replies: text: I'll assume that it is and will remove the implementation code. WillNess (talk) 10:12, 18 November 2011 (UTC)
thread_title:  Amazon preview and copivio 

message: Neither stream.reduce(func) nor stream.reduce(init, func) are real folds:
* They only work if the result-type is the same as the value-type. So it is more akin to Haskells foldl1
* It is not guaranteed that the order is preserved thus it only works if the binary operation is distributive. This becomes apparent when creating tree structures on parallel streams.
This beeing said, there is a way to get real foldl behavior. The stream interface also provides <U> U reduce(U identity, BiFunction<U, ? super T, U> accumulator, BinaryOperator</U> combiner) which is almost foldl if it weren't for the combiner. The combiner is only called if the stream is parallel though. So stream.sequential().reduce(init, func, (l, r) -> { throw new UnsupportedOperationException(); }). This works but you shouldn't do this ... ever.
Is this enough to remove the table entries for java?  — Preceding unsigned comment added by P.dargel (talk • contribs) 14:11, 26 June 2017 (UTC)
thread_title:  Java 

message: If nothing else, the articles should refer to each other with explanations to prevent confusion. Notrium (talk) 18:34, 15 June 2020 (UTC)
thread_title:  What's the difference between this and [[Reduction Operator]] 

message: Most of the examples of foldr in the table are not a right fold. They are simply reversing the array and applying a left fold. There is not enough space in the table to make an actual foldr implementation for all of the languages. Starnche (talk) 01:15, 26 May 2024 (UTC)
thread_title:  The language example table should probably be fully deleted