Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Folding Cheat Sheet #5

Folding Cheat Sheetย #5

Folding a list right and left using Cons and Nil results in the identity and reverse functions.

Keywords: cons, folding, identity function, left fold, nil, reverse function, right fold.

Avatar for Philip Schwarz

Philip Schwarz

June 23, 2024
Tweet

More Decks by Philip Schwarz

Other Decks in Programming

Transcript

  1. CHEAT-SHEET Folding #5 โˆถ / \ ๐’‚๐ŸŽ โˆถ / \

    ๐’‚๐Ÿ โˆถ / \ ๐’‚๐Ÿ โˆถ / \ ๐’‚๐Ÿ‘ ๐’‡ / \ ๐’‚๐ŸŽ ๐’‡ / \ ๐’‚๐Ÿ ๐’‡ / \ ๐’‚๐Ÿ ๐’‡ / \ ๐’‚๐Ÿ‘ ๐’† @philip_schwarz slides by https://fpilluminated.com/
  2. โˆถ / \ ๐‘ฅ1 โˆถ / \ ๐‘ฅ2 โˆถ /

    \ ๐‘ฅ3 โˆถ / \ ๐‘ฅ4 โ€ฅ / \ โ€ฅ ๐‘ฅ4 / \ โ€ฅ ๐‘ฅ3 / \ โ€ฅ ๐‘ฅ2 / \ [ ] ๐‘ฅ1 โˆถ / \ ๐‘ฅ4 โˆถ / \ ๐‘ฅ3 โˆถ / \ ๐‘ฅ2 โˆถ / \ ๐‘ฅ1 ๐‘ฅ4 โˆถ (๐‘ฅ3 โˆถ ๐‘ฅ2 โˆถ ๐‘ฅ1 โˆถ ) โˆถ / \ ๐‘ฅ1 โˆถ / \ ๐‘ฅ2 โˆถ / \ ๐‘ฅ3 โˆถ / \ ๐‘ฅ4 ๐‘ฅ1 : (๐‘ฅ2 : ๐‘ฅ3 : ๐‘ฅ4 : ) (( โ€ฅ๐‘ฅ1 โ€ฅ๐‘ฅ2 )โ€ฅ๐‘ฅ3 )โ€ฅ๐‘ฅ4 var acc = [ ] foreach(x in xs) acc = acc โ€ฅx) return acc ๐‘“๐‘œ๐‘™๐‘‘๐‘Ÿ โˆถ ๐‘ฅ๐‘  ๐‘“๐‘œ๐‘™๐‘‘๐‘™ โ€ฅ ๐‘ฅ๐‘  ๐‘ฅ๐‘  = [๐‘ฅ1 , ๐‘ฅ2 , ๐‘ฅ3 , ๐‘ฅ4 ] ๐‘“๐‘œ๐‘™๐‘‘๐‘Ÿ โˆถ = ๐‘–๐‘‘๐‘’๐‘›๐‘ก๐‘–๐‘ก๐‘ฆ = ๐‘“๐‘œ๐‘™๐‘‘๐‘Ÿ ฮป๐‘ฅ. ฮป๐‘ฆ. ๐‘ฅ โˆถ ๐‘ฆ ๐‘“๐‘œ๐‘™๐‘‘๐‘™ โ€ฅ = ๐‘Ÿ๐‘’๐‘ฃ๐‘’๐‘Ÿ๐‘ ๐‘’ = ๐‘“๐‘œ๐‘™๐‘‘๐‘™ ฮป๐‘ฅ. ฮป๐‘ฆ. ๐‘ฆ โˆถ ๐‘ฅ ๐‘“๐‘œ๐‘™๐‘‘๐‘Ÿ โˆท ๐›ผ โ†’ ๐›ฝ โ†’ ๐›ฝ โ†’ ๐›ฝ โ†’ ๐›ผ โ†’ ๐›ฝ ๐‘“๐‘œ๐‘™๐‘‘๐‘Ÿ ๐‘“ ๐‘’ = ๐‘’ ๐‘“๐‘œ๐‘™๐‘‘๐‘Ÿ ๐‘“ ๐‘’ ๐‘ฅ: ๐‘ฅ๐‘  = ๐‘“ ๐‘ฅ ๐‘“๐‘œ๐‘™๐‘‘๐‘Ÿ ๐‘“ ๐‘’ ๐‘ฅ๐‘  ๐‘“๐‘œ๐‘™๐‘‘๐‘™ โˆท ๐›ฝ โ†’ ๐›ผ โ†’ ๐›ฝ โ†’ ๐›ฝ โ†’ ๐›ผ โ†’ ๐›ฝ ๐‘“๐‘œ๐‘™๐‘‘๐‘™ ๐‘“ ๐‘’ = ๐‘’ ๐‘“๐‘œ๐‘™๐‘‘๐‘™ ๐‘“ ๐‘’ ๐‘ฅ: ๐‘ฅ๐‘  = ๐‘“๐‘œ๐‘™๐‘‘๐‘™ ๐‘“ ๐‘“ ๐‘’ ๐‘ฅ ๐‘ฅ๐‘  โˆถ = ฮป๐‘ฅ. ฮป๐‘ฆ. ๐‘ฅ โˆถ ๐‘ฆ โ€ฅ = ฮป๐‘ฅ. ฮป๐‘ฆ. ๐‘ฆ โˆถ ๐‘ฅ โ€ฅ = ๐‘“๐‘™๐‘–๐‘ โˆถ ๐‘คโ„Ž๐‘’๐‘Ÿ๐‘’ ๐‘“๐‘™๐‘–๐‘ ๐‘“ ๐‘ฅ ๐‘ฆ = ๐‘“ ๐‘ฆ ๐‘ฅ โˆถ / \ โ„Ž ๐‘ก . . / \ ๐‘ก โ„Ž equivalent to [๐‘ฅ4 , ๐‘ฅ3 , ๐‘ฅ2 , ๐‘ฅ1 ] ๐‘–๐‘‘๐‘’๐‘›๐‘ก๐‘–๐‘ก๐‘ฆ ๐‘Ÿ๐‘’๐‘ฃ๐‘’๐‘Ÿ๐‘ ๐‘’ [๐‘ฅ1 , ๐‘ฅ2 , ๐‘ฅ3 , ๐‘ฅ4 ] > id = foldr (:) [] > rev = foldl (flip (:)) [] > id [1,2,3,4] [1,2,3,4] > rev [1,2,3,4] [4,3,2,1] > id = foldr (\x y -> x:y) [] > rev = foldl (\x y -> y:x) [] > id [1,2,3,4] [1,2,3,4] > rev [1,2,3,4] [4,3,2,1] ๐‘Ÿ๐‘’๐‘๐‘™๐‘Ž๐‘๐‘’: โˆถ ๐‘ค๐‘–๐‘กโ„Ž โˆถ ๐‘ค๐‘–๐‘กโ„Ž ๐‘Ÿ๐‘’๐‘๐‘™๐‘Ž๐‘๐‘’: โˆถ ๐‘ค๐‘–๐‘กโ„Ž ๐‘“ ๐‘ค๐‘–๐‘กโ„Ž ๐‘’ var acc = e foreach(x in xs) acc = f (acc, x) return acc folding a list right and left using Cons and Nil results in the identity and reverse functions