{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,1,9]],"date-time":"2026-01-09T03:11:24Z","timestamp":1767928284193,"version":"3.49.0"},"reference-count":9,"publisher":"Wiley","issue":"2","license":[{"start":{"date-parts":[[2006,10,30]],"date-time":"2006-10-30T00:00:00Z","timestamp":1162166400000},"content-version":"vor","delay-in-days":6480,"URL":"http:\/\/onlinelibrary.wiley.com\/termsAndConditions#vor"}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["Softw Pract Exp"],"published-print":{"date-parts":[[1989,2]]},"abstract":"<jats:title>Abstract<\/jats:title><jats:p>A circular program creates a data structure whose computation depends upon itself or refers to itself. The technique is used to implement the classic data structures circular and doubly\u2010linked lists, threaded trees and queues, in a functional programming language. These structures are normally thought to require updateable variables found in imperative languages. For example, a functional program to perform the breadth\u2010first traversal of a tree is given. Some of the examples result in circular data structures when evaluated. Some examples are particularly space\u2010efficient by avoiding the creation of intermediate temporary structures which would otherwise later become garbage. Lastly, the technique can be applied in an imperative language to give an elegant program.<\/jats:p>","DOI":"10.1002\/spe.4380190202","type":"journal-article","created":{"date-parts":[[2006,11,17]],"date-time":"2006-11-17T20:56:43Z","timestamp":1163797003000},"page":"99-109","source":"Crossref","is-referenced-by-count":10,"title":["Circular programs and self\u2010referential structures"],"prefix":"10.1002","volume":"19","author":[{"given":"Lloyd","family":"Allison","sequence":"first","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"311","published-online":{"date-parts":[[2006,10,30]]},"reference":[{"key":"e_1_2_1_2_2","doi-asserted-by":"publisher","DOI":"10.1007\/BF00264249"},{"key":"e_1_2_1_3_2","volume-title":"Two functional programming techniques: continuations and circular programs","author":"Allison L.","year":"1987"},{"key":"e_1_2_1_4_2","first-page":"257","volume-title":"Automata, Languages and Programming","author":"Friedman D. P.","year":"1976"},{"key":"e_1_2_1_5_2","doi-asserted-by":"crossref","unstructured":"P.Henderson \u2018A lazy evaluator\u2019 3rd ACM Symposium on Principles of Programming Languages 1976 pp.95\u2013103.","DOI":"10.1145\/800168.811543"},{"key":"e_1_2_1_6_2","volume-title":"Functional Programming: Application and Implementation","author":"Henderson P.","year":"1980"},{"key":"e_1_2_1_7_2","first-page":"176","volume-title":"Combinators and Functional Programming Languages","author":"Peyton\u2010Jones S. L.","year":"1985"},{"key":"e_1_2_1_8_2","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-15975-4_34"},{"key":"e_1_2_1_9_2","volume-title":"Information Representation and Manipulation in a Computer","author":"Page E. S.","year":"1973"},{"key":"e_1_2_1_10_2","doi-asserted-by":"publisher","DOI":"10.1145\/356850.356854"}],"container-title":["Software: Practice and Experience"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/api.wiley.com\/onlinelibrary\/tdm\/v1\/articles\/10.1002%2Fspe.4380190202","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/onlinelibrary.wiley.com\/doi\/pdf\/10.1002\/spe.4380190202","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2023,10,21]],"date-time":"2023-10-21T23:45:43Z","timestamp":1697931943000},"score":1,"resource":{"primary":{"URL":"https:\/\/onlinelibrary.wiley.com\/doi\/10.1002\/spe.4380190202"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[1989,2]]},"references-count":9,"journal-issue":{"issue":"2","published-print":{"date-parts":[[1989,2]]}},"alternative-id":["10.1002\/spe.4380190202"],"URL":"https:\/\/doi.org\/10.1002\/spe.4380190202","archive":["Portico"],"relation":{},"ISSN":["0038-0644","1097-024X"],"issn-type":[{"value":"0038-0644","type":"print"},{"value":"1097-024X","type":"electronic"}],"subject":[],"published":{"date-parts":[[1989,2]]}}}