📄 ftp:^^ftp.cs.utexas.edu^pub^garbage^cs345^schintro-v11^schintro_toc.html
字号:
</UL><LI><A NAME="SEC138" HREF="schintro_113.html#SEC138">Environments and Procedures</A><UL><LI><A NAME="SEC139" HREF="schintro_114.html#SEC139">Understanding <CODE>let</CODE> and <CODE>lambda</CODE></A><UL><LI><A NAME="SEC140" HREF="schintro_115.html#SEC140"><CODE>let</CODE></A><LI><A NAME="SEC141" HREF="schintro_116.html#SEC141"><CODE>lambda</CODE></A><UL><LI><A NAME="SEC142" HREF="schintro_116.html#SEC142"><CODE>define</CODE> and <CODE>lambda</CODE></A><LI><A NAME="SEC143" HREF="schintro_116.html#SEC143">Currying</A><LI><A NAME="SEC144" HREF="schintro_116.html#SEC144">Procedures are Closures</A></UL></UL><LI><A NAME="SEC145" HREF="schintro_116.html#SEC145">Lambda is cheap, and Closures are Fast</A><LI><A NAME="SEC146" HREF="schintro_117.html#SEC146">An Interpreter with <CODE>let</CODE> and <CODE>lambda</CODE></A><UL><LI><A NAME="SEC147" HREF="schintro_117.html#SEC147">Nested Environments and Recursive Evaluation</A><LI><A NAME="SEC148" HREF="schintro_117.html#SEC148">Integrated, Extensible Treatment of Special Forms</A><LI><A NAME="SEC149" HREF="schintro_118.html#SEC149">Interpreting <CODE>let</CODE></A><LI><A NAME="SEC150" HREF="schintro_118.html#SEC150">Variable References and <CODE>set!</CODE></A><LI><A NAME="SEC151" HREF="schintro_119.html#SEC151">Interpreting <CODE>lambda</CODE> and Procedure Calling</A><UL><LI><A NAME="SEC152" HREF="schintro_119.html#SEC152">Mutual Recursion Between Eval and Apply</A></UL></UL><LI><A NAME="SEC153" HREF="schintro_120.html#SEC153">Variants of <CODE>let</CODE>: <CODE>letrec</CODE> and <CODE>let*</CODE></A><UL><LI><A NAME="SEC154" HREF="schintro_120.html#SEC154">Understanding <CODE>letrec</CODE></A><UL><LI><A NAME="SEC155" HREF="schintro_120.html#SEC155">Using <CODE>letrec</CODE> and <CODE>lambda</CODE> to Implement Modules</A></UL><LI><A NAME="SEC156" HREF="schintro_120.html#SEC156"><CODE>let*</CODE></A></UL><LI><A NAME="SEC157" HREF="schintro_120.html#SEC157">Iteration Constructs</A><UL><LI><A NAME="SEC158" HREF="schintro_120.html#SEC158">Named <CODE>let</CODE></A></UL><LI><A NAME="SEC159" HREF="schintro_120.html#SEC159">Programming with Procedures and Environments</A><LI><A NAME="SEC160" HREF="schintro_120.html#SEC160"><CODE>do</CODE></A><LI><A NAME="SEC161" HREF="schintro_120.html#SEC161">Exercises</A></UL><LI><A NAME="SEC162" HREF="schintro_121.html#SEC162">Recursion in Scheme</A><UL><LI><A NAME="SEC163" HREF="schintro_121.html#SEC163">Subproblems and Reductions (non-tail and tail calls)</A><LI><A NAME="SEC164" HREF="schintro_121.html#SEC164">The Continuation Chain</A><LI><A NAME="SEC165" HREF="schintro_121.html#SEC165">Exploiting Tail Recursion</A><UL><LI><A NAME="SEC166" HREF="schintro_121.html#SEC166">Passing Intermediate Values as Arguments</A><UL><LI><A NAME="SEC167" HREF="schintro_121.html#SEC167">Summing a List</A><LI><A NAME="SEC168" HREF="schintro_121.html#SEC168">Implementing <CODE>length</CODE> tail-recursively</A></UL><LI><A NAME="SEC169" HREF="schintro_121.html#SEC169"><CODE>reduce</CODE></A></UL></UL><LI><A NAME="SEC170" HREF="schintro_122.html#SEC170">Quasiquotation and Macros</A><UL><LI><A NAME="SEC171" HREF="schintro_123.html#SEC171"><CODE>quasiquote</CODE></A><UL><LI><A NAME="SEC172" HREF="schintro_123.html#SEC172"><CODE>unquote-splicing</CODE></A></UL><LI><A NAME="SEC173" HREF="schintro_124.html#SEC173">Defining New Special Forms</A><UL><LI><A NAME="SEC174" HREF="schintro_124.html#SEC174">Macros vs. Procedures</A></UL><LI><A NAME="SEC175" HREF="schintro_124.html#SEC175">Implementing More Scheme Special Forms</A><UL><LI><A NAME="SEC176" HREF="schintro_124.html#SEC176"><CODE>let</CODE></A><LI><A NAME="SEC177" HREF="schintro_124.html#SEC177"><CODE>let*</CODE></A><LI><A NAME="SEC178" HREF="schintro_124.html#SEC178"><CODE>cond</CODE></A><LI><A NAME="SEC179" HREF="schintro_124.html#SEC179">Discussion</A></UL><LI><A NAME="SEC180" HREF="schintro_124.html#SEC180">Lisp-style Macros</A><UL><LI><A NAME="SEC181" HREF="schintro_124.html#SEC181">Ultra-simple Lispish Macros</A><UL><LI><A NAME="SEC182" HREF="schintro_124.html#SEC182">Better Lisp-style Macros</A><LI><A NAME="SEC183" HREF="schintro_124.html#SEC183">Problems With Lisp-Style Macros</A><LI><A NAME="SEC184" HREF="schintro_124.html#SEC184">Ugly Hacks Around Name Conflicts</A></UL></UL><LI><A NAME="SEC185" HREF="schintro_124.html#SEC185">Implementing Simple Macros and Quasiquote</A><UL><LI><A NAME="SEC186" HREF="schintro_124.html#SEC186">Implementing Simple Macros</A><LI><A NAME="SEC187" HREF="schintro_124.html#SEC187">Implementing <CODE>quasiquote</CODE> and <CODE>unquote</CODE></A><UL><LI><A NAME="SEC188" HREF="schintro_124.html#SEC188">Translating backquotes to <CODE>quasiquote</CODE></A><LI><A NAME="SEC189" HREF="schintro_124.html#SEC189"><CODE>quasiquote</CODE></A><LI><A NAME="SEC190" HREF="schintro_124.html#SEC190"><CODE>define-rewriter</CODE></A><LI><A NAME="SEC191" HREF="schintro_124.html#SEC191"><CODE>define-macro</CODE></A></UL></UL><LI><A NAME="SEC192" HREF="schintro_125.html#SEC192">Procedural Macros vs. Template-filling Macros</A><LI><A NAME="SEC193" HREF="schintro_126.html#SEC193">Programming Examples Using Macros</A></UL><LI><A NAME="SEC194" HREF="schintro_127.html#SEC194">Records and Object Orientation</A><UL><LI><A NAME="SEC195" HREF="schintro_127.html#SEC195">Records</A><UL><LI><A NAME="SEC196" HREF="schintro_127.html#SEC196">Data Abstraction</A><LI><A NAME="SEC197" HREF="schintro_127.html#SEC197">Implementing Records</A></UL><LI><A NAME="SEC198" HREF="schintro_127.html#SEC198">Objects</A><UL><LI><A NAME="SEC199" HREF="schintro_127.html#SEC199">Object Orientation</A><LI><A NAME="SEC200" HREF="schintro_127.html#SEC200">Implementing a Simple Object System</A><UL><LI><A NAME="SEC201" HREF="schintro_127.html#SEC201">Generic Functions and Dynamic Dispatch</A><LI><A NAME="SEC202" HREF="schintro_127.html#SEC202">Inheritance</A></UL></UL></UL><LI><A NAME="SEC203" HREF="schintro_128.html#SEC203">Other Useful Features</A><UL><LI><A NAME="SEC204" HREF="schintro_129.html#SEC204">Special Forms</A><LI><A NAME="SEC205" HREF="schintro_130.html#SEC205">Input-Output Facilities</A><UL><LI><A NAME="SEC206" HREF="schintro_131.html#SEC206"><CODE>read</CODE> and <CODE>write</CODE></A><LI><A NAME="SEC207" HREF="schintro_132.html#SEC207"><CODE>display</CODE></A><LI><A NAME="SEC208" HREF="schintro_133.html#SEC208">Ports</A><LI><A NAME="SEC209" HREF="schintro_134.html#SEC209"><CODE>with-input-</CODE>\dots{} Forms</A></UL><LI><A NAME="SEC210" HREF="schintro_134.html#SEC210">Useful Types and Associated Procedures</A><UL><LI><A NAME="SEC211" HREF="schintro_134.html#SEC211">Numeric Types</A><UL><LI><A NAME="SEC212" HREF="schintro_134.html#SEC212">Floating-Point Numbers</A><LI><A NAME="SEC213" HREF="schintro_134.html#SEC213">Arbitrary-Precision Integers</A><LI><A NAME="SEC214" HREF="schintro_134.html#SEC214">Ratios</A><LI><A NAME="SEC215" HREF="schintro_134.html#SEC215">Coercions and Exactness</A></UL><LI><A NAME="SEC216" HREF="schintro_134.html#SEC216">Vectors</A><LI><A NAME="SEC217" HREF="schintro_134.html#SEC217">Strings and Characters</A></UL></UL><LI><A NAME="SEC218" HREF="schintro_135.html#SEC218"><CODE>call-with-current-continuation</CODE></A><UL><LI><A NAME="SEC219" HREF="schintro_135.html#SEC219">Implementing a Better Read-Eval-Print Loop</A><LI><A NAME="SEC220" HREF="schintro_135.html#SEC220">Implementing Catch and Throw</A><LI><A NAME="SEC221" HREF="schintro_135.html#SEC221">Implementing Backtracking</A><LI><A NAME="SEC222" HREF="schintro_135.html#SEC222">Implementing Coroutines</A><LI><A NAME="SEC223" HREF="schintro_135.html#SEC223">Implementing Cooperative Multitasking</A><LI><A NAME="SEC224" HREF="schintro_135.html#SEC224">Caveats about <CODE>call-with-current-continuation</CODE></A></UL><LI><A NAME="SEC225" HREF="schintro_136.html#SEC225">A Simple Scheme Compiler</A><UL><LI><A NAME="SEC226" HREF="schintro_136.html#SEC226">What is a Compiler?</A><UL><LI><A NAME="SEC227" HREF="schintro_136.html#SEC227">What is an Interpreter?</A><LI><A NAME="SEC228" HREF="schintro_136.html#SEC228">OK, so what's a compiler?</A></UL><LI><A NAME="SEC229" HREF="schintro_136.html#SEC229">What Does a Compiler Generate?</A><LI><A NAME="SEC230" HREF="schintro_136.html#SEC230">Basic Structure of the Compiler</A><LI><A NAME="SEC231" HREF="schintro_136.html#SEC231">Data Representations, Calling Convention, etc.</A><UL><LI><A NAME="SEC232" HREF="schintro_136.html#SEC232">The Registers</A><LI><A NAME="SEC233" HREF="schintro_136.html#SEC233">The Evaluation Stack (or Eval Stack, for short)</A><LI><A NAME="SEC234" HREF="schintro_136.html#SEC234">The Continuation Chain</A><LI><A NAME="SEC235" HREF="schintro_136.html#SEC235">Environments</A><LI><A NAME="SEC236" HREF="schintro_136.html#SEC236">Closure Representation and Calling</A></UL><LI><A NAME="SEC237" HREF="schintro_136.html#SEC237">Continuations</A><UL><LI><A NAME="SEC238" HREF="schintro_136.html#SEC238">Applying a Procedure Doesn't Save the Caller's State</A><LI><A NAME="SEC239" HREF="schintro_136.html#SEC239">Continuation Saving</A><LI><A NAME="SEC240" HREF="schintro_136.html#SEC240">An Example</A><LI><A NAME="SEC241" HREF="schintro_136.html#SEC241">Generating Unique Labels</A></UL><LI><A NAME="SEC242" HREF="schintro_136.html#SEC242">More on Representations of Environments</A><LI><A NAME="SEC243" HREF="schintro_136.html#SEC243">Compiling Code for Literals</A><LI><A NAME="SEC244" HREF="schintro_136.html#SEC244">Compiling Code for Top-Level Variable References</A><LI><A NAME="SEC245" HREF="schintro_136.html#SEC245">Precomputing Local Variable Lookups using Lexical Scope</A><UL><LI><A NAME="SEC246" HREF="schintro_136.html#SEC246">Lexical Addressing and Compile-Time Environments</A><LI><A NAME="SEC247" HREF="schintro_136.html#SEC247">A Detailed Example</A></UL><LI><A NAME="SEC248" HREF="schintro_136.html#SEC248">Preserving Tail-Recursiveness using Compile-Time Continuations</A><UL><LI><A NAME="SEC249" HREF="schintro_136.html#SEC249">When Should We Save Continuations?</A><UL><LI><A NAME="SEC250" HREF="schintro_136.html#SEC250">Compiling Returns</A></UL></UL><LI><A NAME="SEC251" HREF="schintro_136.html#SEC251">Compiling Top-Level Expressions</A><LI><A NAME="SEC252" HREF="schintro_136.html#SEC252">Compiling <CODE>lambda</CODE> Expressions Inside Procedures</A><LI><A NAME="SEC253" HREF="schintro_136.html#SEC253">Compiling Top-level Definitions</A><LI><A NAME="SEC254" HREF="schintro_136.html#SEC254">Interfacing to the Runtime System</A><UL><LI><A NAME="SEC255" HREF="schintro_136.html#SEC255">Garbage Collection</A><UL><LI><A NAME="SEC256" HREF="schintro_136.html#SEC256">Safe Points</A><LI><A NAME="SEC257" HREF="schintro_136.html#SEC257">GC at Any Time</A></UL><LI><A NAME="SEC258" HREF="schintro_136.html#SEC258">Interrupts</A></UL><LI><A NAME="SEC259" HREF="schintro_136.html#SEC259">Advanced Compiler and Runtime System Techniques</A><UL><LI><A NAME="SEC260" HREF="schintro_136.html#SEC260">Inlining Small Procedures</A><LI><A NAME="SEC261" HREF="schintro_136.html#SEC261">Type Declarations and Type Analysis</A><LI><A NAME="SEC262" HREF="schintro_136.html#SEC262">Using More Hardware Registers</A><LI><A NAME="SEC263" HREF="schintro_136.html#SEC263">Closure Analysis</A><LI><A NAME="SEC264" HREF="schintro_136.html#SEC264">Register Allocating Loop Variables for Loops</A><LI><A NAME="SEC265" HREF="schintro_136.html#SEC265">Conventional Optimizations</A><LI><A NAME="SEC266" HREF="schintro_136.html#SEC266">Stack Caches</A></UL></UL><LI><A NAME="SEC267" HREF="schintro_137.html#SEC267">Concept Index</A></UL><HR><P>This document was generated on 30 October 1996 using the<A HREF="http://wwwcn.cern.ch/dci/texi2html/">texi2html</A>translator version 1.45.</P></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -