TGViewer
dd if=/dev/stuff of=/dev/tg dd if=/dev/stuff of=/dev/tg @randomstuffilike · 2.48K subscribers
Post #902 3.39K

Forwarded from AlexTCH

https://doi.org/10.1017/S0956796821000113
"How to design co-programs" by Jeremy Gibbons

Статья призывает расширить подход How to Design Programs (aka HtDP, серия курсов, обучающих студентов программированию с нуля, плюс два издания одноимённой книги: https://htdp.org/ если кто не знает) за счёт введения понятия ко-рекурсивных функций и соответствующих паттернов для их построения.

Говоря по-простому, ко-рекурсивные функции — это такие, которые строят свой результат "по кусочкам", используя конструкторы соответствующего (алгебраического) типа данных, вместо того (или вместе с тем) чтобы разбирать входные данные "на кусочки" при помощи сопоставления с образцом (aka [datatype] pattern matching).

Я безусловно согласен с Гиббонсом в том, что ко-рекурсивные функции — очень полезный инструмент в арсенале разработчика, особенно, начинающего. Тем не менее, на мой взгляд, эта тема требует намного более тщательной методической проработки чтобы органично встроиться в общую канву HtDP.

Более того, самая интересная часть этой статьи — ещё одна статья, которая не была написана, к сожалению. 😊 В середине повествования Гиббонс обсуждает "генеративную рекурсию" (generative recursion, термин из HtDP), и показывает как функции (изначально) в форме общей генеративной рекурсии могут быть представлены в виде композиции структурно-рекурсивной и ко-рекурсивной функции (так же известной как "иломорфизм" или "хиломорфизм" — hylomorphism). К сожалению, за кадром остаются самые важные и интересные вопросы: как понять, что данную конкретную функцию можно представить в виде такой композиции, или придётся использовать генеративную рекурсию общего вида? как выбрать подходящую промежуточную структуру для рекурсии и ко-рекурсии? Возможно, эти вопросы удастся прояснить тем, кто интегрирует тему ко-рекурсивных функций в свои учебные программы. 😊
Cambridge Core How to design co-programs | Journal of Functional Programming | Cambridge Core How to design co-programs - Volume 31
More from @randomstuffilike
  1. Mar 13, 2026Задолбался, что приходится быть chief software sloperator на работе, поэтому в терапевтиче…
  2. Feb 28, 2024Моделирование доменных типов на расте: https://mmapped.blog/posts/25-domain-types.html
  3. Dec 5, 2023Слайды доклада Томаса Микулы «Monads Are Not About Sequencing»: https://continuously.dev/p…
  4. Nov 9, 2023Design Guidelines for Domain-Specific Languages Очень хороший пейпер, предлагающий 26 гайд…
  5. Oct 19, 2023И чуть более развернутый пост от автора: https://zackoverflow.dev/writing/flappy-bird-in-t…
  6. Oct 19, 2023https://twitter.com/zack_overflow/status/1715042340514017559 — Flappy Bird на тайплевеле т…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →