{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,5,26]],"date-time":"2026-05-26T23:05:37Z","timestamp":1779836737910,"version":"3.53.1"},"reference-count":17,"publisher":"Cambridge University Press (CUP)","license":[{"start":{"date-parts":[[2021,7,2]],"date-time":"2021-07-02T00:00:00Z","timestamp":1625184000000},"content-version":"unspecified","delay-in-days":182,"URL":"https:\/\/www.cambridge.org\/core\/terms"}],"content-domain":{"domain":["cambridge.org"],"crossmark-restriction":true},"short-container-title":["J. Funct. Prog."],"published-print":{"date-parts":[[2021]]},"abstract":"<jats:title>Abstract<\/jats:title>\n                  <jats:p>\n                    The observation that\n                    <jats:italic>program structure follows data structure<\/jats:italic>\n                    is a key lesson in introductory programming: good hints for possible program designs can be found by considering the structure of the data concerned. In particular, this lesson is a core message of the influential textbook \u201cHow to Design Programs\u201d by Felleisen, Findler, Flatt, and Krishnamurthi. However, that book discusses using only the structure of\n                    <jats:italic>input<\/jats:italic>\n                    data for guiding program design, typically leading towards structurally\n                    <jats:italic>recursive<\/jats:italic>\n                    programs. We argue that novice programmers should also be taught to consider the structure of\n                    <jats:italic>output<\/jats:italic>\n                    data, leading them also towards structurally\n                    <jats:italic>corecursive<\/jats:italic>\n                    programs.\n                  <\/jats:p>","DOI":"10.1017\/s0956796821000113","type":"journal-article","created":{"date-parts":[[2021,7,2]],"date-time":"2021-07-02T07:53:16Z","timestamp":1625212396000},"update-policy":"https:\/\/doi.org\/10.1017\/policypage","source":"Crossref","is-referenced-by-count":7,"title":["How to design co-programs"],"prefix":"10.1017","volume":"31","author":[{"ORCID":"https:\/\/orcid.org\/0000-0002-8426-9917","authenticated-orcid":false,"given":"JEREMY","family":"GIBBONS","sequence":"first","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"56","published-online":{"date-parts":[[2021,7,2]]},"reference":[{"key":"S0956796821000113_ref9","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-030-33636-3_16"},{"key":"S0956796821000113_ref7","volume-title":"How to Design Programs","author":"Felleisen","year":"2018"},{"key":"S0956796821000113_ref16","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-57499-9_26"},{"key":"S0956796821000113_ref13","doi-asserted-by":"publisher","DOI":"10.1007\/3540543961_7"},{"key":"S0956796821000113_ref8","doi-asserted-by":"publisher","DOI":"10.1016\/j.scico.2006.01.006"},{"key":"S0956796821000113_ref1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-540-44833-4_1"},{"key":"S0956796821000113_ref17","doi-asserted-by":"publisher","DOI":"10.1016\/0304-3975(90)90147-A"},{"key":"S0956796821000113_ref11","volume-title":"Principles of Program Design","author":"Jackson","year":"1975"},{"key":"S0956796821000113_ref3","unstructured":"Bloch, S. , Clements, J. , Felleisen, M. , Findler, R. , Fisler, K. , Flatt, M. , Proulx, V. & Krishnamurthi, S. (2009\u20132012) Program by Design. https:\/\/programbydesign.org\/"},{"key":"S0956796821000113_ref12","volume-title":"Software Pioneers: Contributions to Software Engineering","author":"Jackson","year":"2002"},{"key":"S0956796821000113_ref6","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796804005076"},{"key":"S0956796821000113_ref14","doi-asserted-by":"publisher","DOI":"10.1145\/2628136.2628137"},{"key":"S0956796821000113_ref4","doi-asserted-by":"publisher","DOI":"10.1145\/800027.808439"},{"key":"S0956796821000113_ref5","unstructured":"Felleisen, M. , Findler, R. B. , Flatt, M. & Krishnamurthi, S. (2001) How to Design Programs, 1st edn. MIT Press. https:\/\/htdp.org\/2003-09-26\/Book\/"},{"key":"S0956796821000113_ref10","first-page":"83","volume-title":"Structured Programming","author":"Hoare","year":"1972"},{"key":"S0956796821000113_ref2","unstructured":"Bloch, S. , Clements, J. , Felleisen, M. , Findler, R. , Fisler, K. , Flatt, M. , Proulx, V. & Krishnamurthi, S. (1995\u20132007) TeachScheme! https:\/\/teach-scheme.org\/"},{"key":"S0956796821000113_ref15","doi-asserted-by":"publisher","DOI":"10.5210\/fm.v3i2.578"}],"container-title":["Journal of Functional Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.cambridge.org\/core\/services\/aop-cambridge-core\/content\/view\/S0956796821000113","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2026,5,26]],"date-time":"2026-05-26T22:36:11Z","timestamp":1779834971000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.cambridge.org\/core\/product\/identifier\/S0956796821000113\/type\/journal_article"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2021]]},"references-count":17,"alternative-id":["S0956796821000113"],"URL":"https:\/\/doi.org\/10.1017\/s0956796821000113","relation":{},"ISSN":["0956-7968","1469-7653"],"issn-type":[{"value":"0956-7968","type":"print"},{"value":"1469-7653","type":"electronic"}],"subject":[],"published":{"date-parts":[[2021]]},"assertion":[{"value":"\u00a9 The Author(s) 2021. Published by Cambridge University Press","name":"copyright","label":"Copyright","group":{"name":"copyright_and_licensing","label":"Copyright and Licensing"}}],"article-number":"e15"}}