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

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 ๐‘“๐‘œ๐‘™๐‘‘๐‘Ÿ: