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

Folding Cheat Sheet #1

Folding Cheat Sheetย #1

Folding over recursively defined data structures for natural numbers and lists.

Keywords: folding, list, lists, nat, natural numbers, recursive datatype, recursive function, right fold.

Avatar for Philip Schwarz

Philip Schwarz PRO

March 29, 2024
Tweet

More Decks by Philip Schwarz

Other Decks in Programming

Transcript

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

    ๐’‚๐Ÿ โˆถ / \ ๐’‚๐Ÿ โˆถ / \ ๐’‚๐Ÿ‘ ๐’‡ / \ ๐’‚๐ŸŽ ๐’‡ / \ ๐’‚๐Ÿ ๐’‡ / \ ๐’‚๐Ÿ ๐’‡ / \ ๐’‚๐Ÿ‘ ๐’† @philip_schwarz slides by https://fpilluminated.com/
  2. ๐๐š๐ญ๐š ๐‘ต๐’‚๐’• = ๐’๐’†๐’“๐’ | ๐‘บ๐’–๐’„๐’„ ๐‘ต๐’‚๐’• ๐๐š๐ญ๐š ๐‘ณ๐’Š๐’”๐’• ฮฑ

    = ๐‘ต๐’Š๐’ | ๐‘ช๐’๐’๐’” ฮฑ (๐‘ณ๐’Š๐’”๐’• ฮฑ) ๐‘“ :: ๐‘ต๐’‚๐’• โ†’ ๐›ผ ๐‘“ ๐’๐’†๐’“๐’ = ๐‘ ๐‘“ ๐‘บ๐’–๐’„๐’„ ๐‘› = โ„Ž ๐‘“ ๐‘› ๐‘“๐‘œ๐‘™๐‘‘๐‘› โˆท ๐›ผ โ†’ ๐›ผ โ†’ ๐›ผ โ†’ ๐‘ต๐’‚๐’• โ†’ ๐›ผ ๐‘“๐‘œ๐‘™๐‘‘๐‘› โ„Ž ๐‘ ๐’๐’†๐’“๐’ = ๐‘ ๐‘“๐‘œ๐‘™๐‘‘๐‘› โ„Ž ๐‘ ๐‘บ๐’–๐’„๐’„ ๐‘› = โ„Ž ๐‘“๐‘œ๐‘™๐‘‘๐‘› โ„Ž ๐‘ ๐‘› ๐‘š + ๐‘› = ๐‘“๐‘œ๐‘™๐‘‘๐‘› ๐‘บ๐’–๐’„๐’„ ๐‘š ๐‘› ๐‘š ร— ๐‘› = ๐‘“๐‘œ๐‘™๐‘‘๐‘› ๐œ†๐‘ฅ. ๐‘ฅ + ๐‘š ๐’๐’†๐’“๐’ ๐‘› ๐‘š โ†‘ ๐‘› = ๐‘“๐‘œ๐‘™๐‘‘๐‘› ๐œ†๐‘ฅ. ๐‘ฅ ร— ๐‘š ๐‘บ๐’–๐’„๐’„ ๐’๐’†๐’“๐’ ๐‘› + โˆท ๐‘ต๐’‚๐’• โ†’ ๐‘ต๐’‚๐’• โ†’ ๐‘ต๐’‚๐’• ๐‘š + ๐’๐’†๐’“๐’ = ๐‘š ๐‘š + ๐‘บ๐’–๐’„๐’„ ๐‘› = ๐‘บ๐’–๐’„๐’„ ๐‘š + ๐‘› (ร—) โˆท ๐‘ต๐’‚๐’• โ†’ ๐‘ต๐’‚๐’• โ†’ ๐‘ต๐’‚๐’• ๐‘š ร— ๐’๐’†๐’“๐’ = ๐’๐’†๐’“๐’ ๐‘š ร— ๐‘บ๐’–๐’„๐’„ ๐‘› = ๐‘š ร— ๐‘› + ๐‘š (โ†‘) โˆท ๐‘ต๐’‚๐’• โ†’ ๐‘ต๐’‚๐’• โ†’ ๐‘ต๐’‚๐’• ๐‘š โ†‘ ๐’๐’†๐’“๐’ = ๐‘บ๐’–๐’„๐’„ ๐’๐’†๐’“๐’ ๐‘š โ†‘ ๐‘บ๐’–๐’„๐’„ ๐‘› = ๐‘š โ†‘ ๐‘› ร— ๐‘š ๐‘“๐‘œ๐‘™๐‘‘๐‘Ÿ โˆท ๐›ผ โ†’ ๐›ฝ โ†’ ๐›ฝ โ†’ ๐›ฝ โ†’ ๐›ผ โ†’ ๐›ฝ ๐‘“๐‘œ๐‘™๐‘‘๐‘Ÿ ๐‘“ ๐‘ ๐‘ต๐’Š๐’ = ๐‘ ๐‘“๐‘œ๐‘™๐‘‘๐‘Ÿ ๐‘“ ๐‘ (๐‘ช๐’๐’๐’” ๐‘ฅ ๐‘ฅ๐‘ ) = ๐‘“ ๐‘ฅ ๐‘“๐‘œ๐‘™๐‘‘๐‘Ÿ ๐‘“ ๐‘ ๐‘ฅ๐‘  ๐‘“ :: ๐‘ณ๐’Š๐’”๐’• ๐›ผ โ†’ ๐›ฝ ๐‘“ ๐‘ต๐’Š๐’ = ๐‘ ๐‘“ ๐‘ช๐’๐’๐’” ๐‘ฅ ๐‘ฅ๐‘  = โ„Ž ๐‘ฅ (๐‘“ ๐‘ฅ๐‘ ) ๐‘ ๐‘ข๐‘š โˆท ๐‘ณ๐’Š๐’”๐’• ๐‘ต๐’‚๐’• โ†’ ๐‘ต๐’‚๐’• ๐‘ ๐‘ข๐‘š ๐‘ต๐’Š๐’ = ๐’๐’†๐’“๐’ ๐‘ ๐‘ข๐‘š ๐‘ช๐’๐’๐’” ๐‘ฅ ๐‘ฅ๐‘  = ๐‘ฅ + (๐‘ ๐‘ข๐‘š ๐‘ฅ๐‘ ) ๐‘Ž๐‘๐‘๐‘’๐‘›๐‘‘ โˆท ๐‘ณ๐’Š๐’”๐’• ๐›ผ โ†’ ๐‘ณ๐’Š๐’”๐’• ๐›ผ โ†’ ๐‘ณ๐’Š๐’”๐’• ๐›ผ ๐‘Ž๐‘๐‘๐‘’๐‘›๐‘‘ ๐‘ต๐’Š๐’ ๐‘ฆ๐‘  = ๐‘ฆ๐‘  ๐‘Ž๐‘๐‘๐‘’๐‘›๐‘‘ ๐‘ช๐’๐’๐’” ๐‘ฅ ๐‘ฅ๐‘  ๐‘ฆ๐‘  = ๐‘ช๐’๐’๐’” ๐‘ฅ (๐‘Ž๐‘๐‘๐‘’๐‘›๐‘‘ ๐‘ฅ๐‘  ๐‘ฆ๐‘ ) ๐‘™๐‘’๐‘›๐‘”๐‘กโ„Ž โˆท ๐‘ณ๐’Š๐’”๐’• ๐›ผ โ†’ ๐‘ต๐’‚๐’• ๐‘™๐‘’๐‘›๐‘”๐‘กโ„Ž ๐‘ต๐’Š๐’ = ๐’๐’†๐’“๐’ ๐‘™๐‘’๐‘›๐‘”๐‘กโ„Ž ๐‘ช๐’๐’๐’” ๐‘ฅ ๐‘ฅ๐‘  = ๐‘บ๐’–๐’„๐’„ ๐’๐’†๐’“๐’ + (๐‘™๐‘’๐‘›๐‘”๐‘กโ„Ž ๐‘ฅ๐‘ ) ๐‘ ๐‘ข๐‘š ๐‘ฅ๐‘  = ๐‘“๐‘œ๐‘™๐‘‘๐‘Ÿ + ๐’๐’†๐’“๐’ ๐‘ฅ๐‘  ๐‘™๐‘’๐‘›๐‘”๐‘กโ„Ž ๐‘ฅ๐‘  = ๐‘“๐‘œ๐‘™๐‘‘๐‘Ÿ ๐œ†๐‘ฅ. ๐œ†๐‘›. ๐‘› + ๐‘บ๐’–๐’„๐’„ ๐’๐’†๐’“๐’ ๐’๐’†๐’“๐’ ๐‘ฅ๐‘  ๐‘Ž๐‘๐‘๐‘’๐‘›๐‘‘ ๐‘ฅ๐‘  ๐‘ฆ๐‘  = ๐‘“๐‘œ๐‘™๐‘‘๐‘Ÿ ๐‘ช๐’๐’๐’” ๐‘ฆ๐‘  ๐‘ฅ๐‘  Common pattern for many recursive functions over ๐‘ต๐’‚๐’• : Common pattern for many recursive functions over ๐‘ณ๐’Š๐’”๐’•: ๐‘ :: ๐›ผ โ„Ž :: ๐›ผ โ†’ ๐›ผ ๐‘ :: ๐›ฝ โ„Ž :: ๐›ผ โ†’ ๐›ฝ Three examples of such functions: Three examples of such functions: The common pattern can be captured in a function: The common pattern can be captured in a function: The three sample functions implemented using ๐‘“๐‘œ๐‘™๐‘‘๐‘›: The three sample functions implemented using ๐‘“๐‘œ๐‘™๐‘‘๐‘Ÿ: