{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,2,24]],"date-time":"2026-02-24T16:51:19Z","timestamp":1771951879388,"version":"3.50.1"},"reference-count":0,"publisher":"Cambridge University Press (CUP)","issue":"1-2","license":[{"start":{"date-parts":[[2004,1,6]],"date-time":"2004-01-06T00:00:00Z","timestamp":1073347200000},"content-version":"unspecified","delay-in-days":5,"URL":"https:\/\/www.cambridge.org\/core\/terms"}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["Theory and Practice of Logic\n                                Programming"],"published-print":{"date-parts":[[2004,1]]},"abstract":"<jats:p>The so called \u201c<jats:italic>cogen<\/jats:italic> approach\u201d to program\n                                specialisation, writing a compiler generator instead of a\n                                specialiser, has been used with considerable success in partial\n                                evaluation of both functional and imperative languages. This paper\n                                demonstrates that the <jats:italic>cogen<\/jats:italic> approach is also\n                                applicable to the specialisation of logic programs (called partial\n                                deduction) and leads to effective specialisers. Moreover, using good\n                                binding-time annotations, the speed-ups of the specialised programs\n                                are comparable to the speed-ups obtained with online specialisers.\n                                The paper first develops a generic approach to offline partial\n                                deduction and then a specific offline partial deduction method,\n                                leading to the offline system <jats:sc>LIX<\/jats:sc> for pure logic programs.\n                                While this is a usable specialiser by itself, it is used to develop\n                                the <jats:italic>cogen<\/jats:italic> system <jats:sc>LOGEN<\/jats:sc>. Given a program, a\n                                specification of what inputs will be static, and an annotation\n                                specifying which calls should be unfolded, <jats:sc>LOGEN<\/jats:sc> generates\n                                a specialised specialiser for the program at hand. Running this\n                                specialiser with particular values for the static inputs results in\n                                the specialised program. While this requires two steps instead of\n                                one, the efficiency of the specialisation process is improved in\n                                situations where the same program is specialised multiple times. The\n                                paper also presents and evaluates an automatic binding-time analysis\n                                that is able to derive the annotations. While the derived\n                                annotations are still suboptimal compared to hand-crafted ones, they\n                                enable non-expert users to use the <jats:sc>LOGEN<\/jats:sc> system in a fully\n                                automated way. Finally, <jats:sc>LOGEN<\/jats:sc> is extended so as to directly\n                                support a large part of Prolog's declarative and non-declarative\n                                features and so as to be able to perform so called mixline\n                                specialisations.<\/jats:p>","DOI":"10.1017\/s1471068403001662","type":"journal-article","created":{"date-parts":[[2004,1,6]],"date-time":"2004-01-06T09:49:56Z","timestamp":1073382596000},"page":"139-191","source":"Crossref","is-referenced-by-count":26,"title":["Offline specialisation in Prolog using a hand-written\n                                compiler generator"],"prefix":"10.1017","volume":"4","author":[{"given":"MICHAEL","family":"LEUSCHEL","sequence":"first","affiliation":[]},{"given":"JESPER","family":"J\u00d8RGENSEN","sequence":"additional","affiliation":[]},{"given":"WIM","family":"VANHOOF","sequence":"additional","affiliation":[]},{"given":"MAURICE","family":"BRUYNOOGHE","sequence":"additional","affiliation":[]}],"member":"56","published-online":{"date-parts":[[2004,1,6]]},"container-title":["Theory and Practice of Logic Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.cambridge.org\/core\/services\/aop-cambridge-core\/content\/view\/S1471068403001662","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,21]],"date-time":"2025-06-21T02:26:02Z","timestamp":1750472762000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.cambridge.org\/core\/product\/identifier\/S1471068403001662\/type\/journal_article"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2004,1]]},"references-count":0,"journal-issue":{"issue":"1-2","published-print":{"date-parts":[[2004,1]]}},"alternative-id":["S1471068403001662"],"URL":"https:\/\/doi.org\/10.1017\/s1471068403001662","relation":{},"ISSN":["1471-0684","1475-3081"],"issn-type":[{"value":"1471-0684","type":"print"},{"value":"1475-3081","type":"electronic"}],"subject":[],"published":{"date-parts":[[2004,1]]}}}