{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,5,26]],"date-time":"2026-05-26T23:05:16Z","timestamp":1779836716085,"version":"3.53.1"},"reference-count":30,"publisher":"Cambridge University Press (CUP)","issue":"3","license":[{"start":{"date-parts":[[2008,11,7]],"date-time":"2008-11-07T00:00:00Z","timestamp":1226016000000},"content-version":"unspecified","delay-in-days":5243,"URL":"https:\/\/www.cambridge.org\/core\/terms"}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["J. Funct. Prog."],"published-print":{"date-parts":[[1994,7]]},"abstract":"<jats:title>Abstract<\/jats:title>\n                  <jats:p>\n                    Lazy functional languages have non-strict semantics and are purely declarative, i.e. they support the notion of referential transparency and are devoid of side-effects. Traditional debugging techniques are, however, not suited for lazy functional languages, since computations generally do not take place in the order one might expect. Since\n                    <jats:italic>algorithmic debugging<\/jats:italic>\n                    allows the user to concentrate on the declarative aspects of program semantics, and will semi-automatically find functions containing bugs, we propose to use this technique for debugging lazy functional programs. Because of the non-strict semantics of lazy functional languages, arguments to functions are in general partially evaluated expressions. The user is, however, usually more concerned with the values that these expressions represent. We address this problem by providing the user with a\n                    <jats:italic>strictified<\/jats:italic>\n                    view of the execution trace whenever possible. In this paper, we present an algorithmic debugger for a lazy functional language based on strictification and some experience in using it. A number of problems with the current implementation of the debugger (e.g. too large trace size and too many questions asked) are also discussed and some techniques for overcoming these problems, at least partially, are suggested. The key techniques are\n                    <jats:italic>immediate strictification<\/jats:italic>\n                    and\n                    <jats:italic>piecemeal tracing<\/jats:italic>\n                    .\n                  <\/jats:p>","DOI":"10.1017\/s095679680000109x","type":"journal-article","created":{"date-parts":[[2008,11,7]],"date-time":"2008-11-07T11:12:51Z","timestamp":1226056371000},"page":"337-369","source":"Crossref","is-referenced-by-count":42,"title":["Algorithmic debugging for lazy functional languages"],"prefix":"10.1017","volume":"4","author":[{"given":"Henrik","family":"Nilsson","sequence":"first","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"Peter","family":"Fritzson","sequence":"additional","affiliation":[],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"56","published-online":{"date-parts":[[2008,11,7]]},"reference":[{"key":"S095679680000109X_ref001","doi-asserted-by":"crossref","unstructured":"Augustsson L. (1984) A compiler for lazy ML. In: Proceedings ACM Conference on LISP and Functional Programming, pp. 218\u2013227, 08.","DOI":"10.1145\/800055.802038"},{"key":"S095679680000109X_ref006","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-54194-2_34"},{"key":"S095679680000109X_ref002","unstructured":"Augustsson L. (1987) Compiling Lazy Functional Languages part II. PhD thesis, Department of Computer Science, Chalmers University of Technology, 12."},{"key":"S095679680000109X_ref013","doi-asserted-by":"crossref","unstructured":"Kishon A. , Hudak P. and Consel C. (1991) Monitoring semantics: A formal framework for specifying, implementing, and reasoning about execution monitors. In: Proceedings ACM SIGPLAN Conference on Programming Language Design and Implementation, Toronto, Canada, June.","DOI":"10.1145\/113445.113474"},{"key":"S095679680000109X_ref004","unstructured":"Drabent W. , Nadjm-Tehrani S. and Maluszynski J. (1988) The use of assertions in algorithmic debugging. In: Proceedings FGCS Conference, Tokyo, Japan, pp. 573\u2013581."},{"key":"S095679680000109X_ref012","unstructured":"Kamkar M. (1993) Interprocedural Dynamic Slicing with Applications to Debugging and Testing. PhD thesis, Department of Computer and Information Science, Link\u00f6ping University, Sweden, 04."},{"key":"S095679680000109X_ref005","doi-asserted-by":"crossref","unstructured":"Fritzson P. , Gyimothy T. , Kamkar M. and Shahmehri N. (1991) Generalized algorithmic debugging and testing. In: Proceedings ACM SIGPLAN Conference Toronto, Canada, pp. 317\u2013326, 06. (A revised version to appear in ACM Letters of Programming Languages and Systems.)","DOI":"10.1145\/113446.113472"},{"key":"S095679680000109X_ref026","doi-asserted-by":"publisher","DOI":"10.1007\/BF03037389"},{"key":"S095679680000109X_ref009","doi-asserted-by":"crossref","unstructured":"Johnsson T. (1984) Efficient compilation of lazy evaluation. In: Proceedings ACM SIGPLAN Symposium on Compiler Construction, pp. 58\u201369, 06. (Proceedings published in SIGPLAN Notices 19(6).)","DOI":"10.1145\/502949.502880"},{"key":"S095679680000109X_ref008","doi-asserted-by":"crossref","unstructured":"Hall C.V. and O'Donnell J.T. (1985) Debugging in a side effect free programming environment. In: Proceedings ACM SIGPLAN Symposium on Language Issues in Programming Environments, Seattle, LA, pp. 60\u201368, 06. (Proceedings published in SIGPLAN Notices 20(7).)","DOI":"10.1145\/17919.806827"},{"key":"S095679680000109X_ref003","unstructured":"Augustsson L. (1991) The lack of suitable debugging tools for lazy functional languages. Personal communication, 11."},{"key":"S095679680000109X_ref016","volume-title":"Declarative debugging of lazy functional programs","author":"Naish","year":"1992"},{"key":"S095679680000109X_ref017","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-55844-6_149"},{"key":"S095679680000109X_ref014","unstructured":"Shai Kishon A. (1992) Theory and Art of Semantics Directed Program Execution Monitoring. PhD thesis, Yale University, 05."},{"key":"S095679680000109X_ref024","unstructured":"Shahmehri N. (1991) Generalized Algorithmic Debugging. PhD thesis, Department of Computer and Information Science, Link\u00f6ping University, Sweden."},{"key":"S095679680000109X_ref021","volume-title":"The Implementation of Functional Programming Languages","author":"Peyton-Jones","year":"1987"},{"key":"S095679680000109X_ref010","unstructured":"Johnsson T. (1987) Compiling Lazy Functional Languages. PhD thesis, Department of Computer Science, Chalmers University of Technology, 02."},{"key":"S095679680000109X_ref011","volume-title":"A debugging environment for functional programming in Centaur","author":"Kamin","year":"1990"},{"key":"S095679680000109X_ref018","doi-asserted-by":"publisher","DOI":"10.1007\/BFb0019405"},{"key":"S095679680000109X_ref028","doi-asserted-by":"publisher","DOI":"10.1145\/358557.358577"},{"key":"S095679680000109X_ref019","unstructured":"Nilsson H. (1991) Freja: A small non-strict, purely functional language. MSc dissertation, Department of Computer Science and Applied Mathematics, Aston University, Birmingham, UK, 09."},{"key":"S095679680000109X_ref007","doi-asserted-by":"publisher","DOI":"10.1007\/BFb0019406"},{"key":"S095679680000109X_ref015","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-55844-6_148"},{"key":"S095679680000109X_ref020","doi-asserted-by":"publisher","DOI":"10.1007\/BF01806168"},{"key":"S095679680000109X_ref022","doi-asserted-by":"publisher","DOI":"10.1109\/MS.1987.230396"},{"key":"S095679680000109X_ref023","doi-asserted-by":"crossref","volume-title":"Algorithmic Program Debugging","author":"Shapiro","DOI":"10.7551\/mitpress\/1192.001.0001"},{"key":"S095679680000109X_ref025","unstructured":"Toyn I. (1987) Exploratory Environments for Functional Programming. PhD thesis, Department of Computer Science, University of York, UK, 04."},{"key":"S095679680000109X_ref027","doi-asserted-by":"crossref","unstructured":"Turner D.A. (1985) Miranda: A non-strict functional language with polymorphic types. In: Proceedings IFIP International Conference on Functional Programming Languages and Computer Architecture, FPCA'85, Vol. 201 in Lecture Notes in Computer Science, Nancy, France.","DOI":"10.1007\/3-540-15975-4_26"},{"key":"S095679680000109X_ref029","doi-asserted-by":"publisher","DOI":"10.1109\/TSE.1984.5010248"},{"key":"S095679680000109X_ref030","doi-asserted-by":"crossref","unstructured":"Westman R. and Fritzson P. (1993) Graphical user interfaces for algorithmic debugging. In: Fritzson P.A. (ed.) Automated and Algorithmic Debugging, Vol. 749 of Lecture Notes in Computer Science, pp. 273\u2013286, Link\u00f6ping Sweden, May.","DOI":"10.1007\/BFb0019414"}],"container-title":["Journal of Functional Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.cambridge.org\/core\/services\/aop-cambridge-core\/content\/view\/S095679680000109X","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2026,5,26]],"date-time":"2026-05-26T22:35:15Z","timestamp":1779834915000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.cambridge.org\/core\/product\/identifier\/S095679680000109X\/type\/journal_article"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[1994,7]]},"references-count":30,"journal-issue":{"issue":"3","published-print":{"date-parts":[[1994,7]]}},"alternative-id":["S095679680000109X"],"URL":"https:\/\/doi.org\/10.1017\/s095679680000109x","relation":{},"ISSN":["0956-7968","1469-7653"],"issn-type":[{"value":"0956-7968","type":"print"},{"value":"1469-7653","type":"electronic"}],"subject":[],"published":{"date-parts":[[1994,7]]}}}