{"title":"To nreverse when consing a list or by pointer manipulation, to avoid it; that is the question","authors":"R. Waters","doi":"10.1145/181889.181892","DOIUrl":"https://doi.org/10.1145/181889.181892","url":null,"abstract":"A situation that arises all the time in Lisp is the need to create a list of elements where the order of the elements in the list is the same as the order that they are created in time---i.e., the first element computed is the first element in the list, the second element computed is the second element in the list, etc. There are two basic ways of doing this: the nreverse approach and the rplacd approach. In the nreverse approach, you push the elements onto the list as they are computed and then use nreverse to put the list into the correct order after all of the elements have been computed. In the rplacd approach, you maintain a pointer to the end of the list and use rplacd to put each element directly into its proper place in the list.","PeriodicalId":262740,"journal":{"name":"ACM SIGPLAN Lisp Pointers","volume":"46 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1993-10-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"124427459","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
{"title":"EQUAL rights—and wrongs—in Lisp","authors":"K. Pitman","doi":"10.1145/181889.181893","DOIUrl":"https://doi.org/10.1145/181889.181893","url":null,"abstract":"Operations in Lisp, Scheme, and other dynamically-typed languages typically dispatch on representational type information rather than intentional type information. Several broad classes of bugs and confusions can be traced to improper attempts to recover intentional type information from representation types.","PeriodicalId":262740,"journal":{"name":"ACM SIGPLAN Lisp Pointers","volume":"1 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1993-10-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"130762342","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
{"title":"The scheme of things: implementing lexically scoped macros","authors":"J. Rees","doi":"10.1145/173770.173774","DOIUrl":"https://doi.org/10.1145/173770.173774","url":null,"abstract":"I have been hearing some complaints that Scheme's new lexically scoped macro facility is difficult to implement. There are two components to the proposal: the pattern language and lexical scoping. The two pose independent problems. I agree that the ellipsis-enriched pattern language can be tricky to implement; implementations that I have seen take anywhere from 250 to 1400 lines of Scheme code. However, I believe that it is conceptually straightforward, and several implementations have been around for many years (see [9]). On the other hand, many people are unnecessarily getting tripped up on lexical scoping, which, unlike the pattern matcher, is very simple to implement.","PeriodicalId":262740,"journal":{"name":"ACM SIGPLAN Lisp Pointers","volume":"20 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1993-01-02","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"121255581","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
{"title":"Continuation conscious compilation","authors":"C. Queinnec","doi":"10.1145/173770.173771","DOIUrl":"https://doi.org/10.1145/173770.173771","url":null,"abstract":"This paper proposes some (unimplemented) ideas for the compilation of Scheme-like languages where functions may be specialized with respect to some of the continuations with which they are invoked. This allows for some optimizations, for instance, when a frame to be pushed and the frame on top of the continuation can be combined into a single and simplified frame. Among possible improvements are: intermediate data structure elimination and removal of useless calculations. Functions can therefore be compiled with respect to their near future and reorganize it when appropriate.The compilation technique is based on a program transformation named Abstract Continuation Passing Style that makes continuation (i.e. stack) frames explicit. Shape of continuations is approximated to determine which frames would gain by being combined together then partial evaluation is used to determine the behavior of combined frames. Our main results cover local deforestation-like effect as well as iterative compilation of associatively wrapped recursions converting, for example, a recursive unary factorial into an iterative binary one.","PeriodicalId":262740,"journal":{"name":"ACM SIGPLAN Lisp Pointers","volume":"17 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1993-01-02","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"124107878","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
{"title":"PSD—a portable scheme debugger","authors":"Pertti Kellomäki","doi":"10.1145/173770.173772","DOIUrl":"https://doi.org/10.1145/173770.173772","url":null,"abstract":"Psd is a portable debugger for the Scheme language. Debugging with Psd is accomplished by instrumenting the original source program. When the instrumented program is run, it presents the user with an interactive interface that lets him or her examine and change values of variables, set breakpoints, and single step evaluation. Psd is designed to be run within GNU Emacs, which is used for displaying the current source code position.","PeriodicalId":262740,"journal":{"name":"ACM SIGPLAN Lisp Pointers","volume":"25 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1993-01-02","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"131761687","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
{"title":"Macroexpand-All: an example of a simple lisp code walker","authors":"R. Waters","doi":"10.1145/173770.173773","DOIUrl":"https://doi.org/10.1145/173770.173773","url":null,"abstract":"If you like to write Lisp macros, or even just use the macros other people write, you have no doubt felt the desire to see what particular macro calls expand into. The standard Common Lisp function macroexpand is very useful in this regard; however, since it only expands the topmost form in an expression, it does not necessarily show you the full result of a macro expansion.","PeriodicalId":262740,"journal":{"name":"ACM SIGPLAN Lisp Pointers","volume":"12 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1993-01-02","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"128877933","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
{"title":"What's in a Name?: Uses and Abuses of Lispy Terminology","authors":"K. Pitman","doi":"10.1145/173770.1040011","DOIUrl":"https://doi.org/10.1145/173770.1040011","url":null,"abstract":"Every now and then, when leafing through the trade rags or rummaging the shelves at a nearby computer store, I notice that some concept that I've known from the research community has crossed the magic threshold into commodity producthood and joined the ranks of other ubiquitous, meaningless, must-have product buzz phrases.","PeriodicalId":262740,"journal":{"name":"ACM SIGPLAN Lisp Pointers","volume":"22 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1993-01-02","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"133680396","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
{"title":"STOL - literate programming in SCHEME","authors":"D. Kobler, D. Hernández","doi":"10.1145/382126.382663","DOIUrl":"https://doi.org/10.1145/382126.382663","url":null,"abstract":"St o L provides simple means for literate programming in Scheme. It helps you to improve the external presentation of your ideas by producing high quality typesetted output { containing both as is\" code and formatted comments { from unmodiied (or only slightly modiied) sources.","PeriodicalId":262740,"journal":{"name":"ACM SIGPLAN Lisp Pointers","volume":" 12","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1992-10-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"133021041","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
{"title":"Compiling syntactically recursive programs","authors":"C. Queinnec","doi":"10.1145/382126.382129","DOIUrl":"https://doi.org/10.1145/382126.382129","url":null,"abstract":"Lisp programs are traditionally represented by S-expressions. Side-eeecting S-expressions allows to easily build cyclic S-expressions which can be turned, through macroexpansion, into syntactically recursive programs i.e., programs which do not have a nite DAG-like representation. We do not know of any compiler able to compile such syntactically recursive programs. Yet, interpreters do not have these problems when evaluating these sort of programs. The paper proposes a program transformation that translates any possibly syntactically recursive program into an equivalent regular program. This result establishes (i) that any S-expression can be considered as a program irrespectively of its possibly cyclic structure, (ii) the equivalence of compilers and interpreters with respect to any S-expression as well as (iii) the possibility to implement a dynamic evaluation facility i.e., the eval function, without any interpreter and with the sole use of a compiler.","PeriodicalId":262740,"journal":{"name":"ACM SIGPLAN Lisp Pointers","volume":"76 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"1992-10-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"127238383","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}