/usr/share/doc/r5rs-doc/r5rs/Language-changes.html is in r5rs-doc 20010328-7.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 | <html lang="en">
<head>
<title>Language changes - Revised(5) Scheme</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="Revised(5) Scheme">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="Notes.html#Notes" title="Notes">
<link rel="prev" href="Notes.html#Notes" title="Notes">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
pre.display { font-family:inherit }
pre.format { font-family:inherit }
pre.smalldisplay { font-family:inherit; font-size:smaller }
pre.smallformat { font-family:inherit; font-size:smaller }
pre.smallexample { font-size:smaller }
pre.smalllisp { font-size:smaller }
span.sc { font-variant:small-caps }
span.roman { font-family:serif; font-weight:normal; }
span.sansserif { font-family:sans-serif; font-weight:normal; }
--></style>
</head>
<body>
<div class="node">
<a name="Language-changes"></a>
<p>
Previous: <a rel="previous" accesskey="p" href="Notes.html#Notes">Notes</a>,
Up: <a rel="up" accesskey="u" href="Notes.html#Notes">Notes</a>
<hr>
</div>
<h3 class="unnumberedsec">Language changes</h3>
<p><a name="index-g_t_0040w_007blanguage-changes_007d-494"></a>
<p>This section enumerates the changes that have been made to Scheme since
the “Revised^4 report” [R4RS] was published.
<ul>
<li>The report is now a superset of the IEEE standard for Scheme
[IEEEScheme]: implementations that conform to the report will
also conform to the standard. This required the following changes:
<ul>
<li>The empty list is now required to count as true.
<li>The classification of features as essential or inessential has been
removed. There are now three classes of built-in procedures: primitive,
library, and optional. The optional procedures are ‘<samp><span class="samp">load</span></samp>’,
‘<samp><span class="samp">with-input-from-file</span></samp>’, ‘<samp><span class="samp">with-output-to-file</span></samp>’,
‘<samp><span class="samp">transcript-on</span></samp>’, ‘<samp><span class="samp">transcript-off</span></samp>’, and
‘<samp><span class="samp">interaction-environment</span></samp>’,
and ‘<samp><span class="samp">-</span></samp>’ and ‘<samp><span class="samp">/</span></samp>’ with more than two arguments.
None of these are in the IEEE standard.
<li>Programs are allowed to redefine built-in procedures. Doing so
will not change the behavior of other built-in procedures.
</ul>
<li><em>Port</em> has been added to the list of disjoint types.
<li>The macro appendix has been removed. High-level macros are now part
of the main body of the report. The rewrite rules for derived expressions
have been replaced with macro definitions. There are no reserved identifiers.
<li>‘<samp><span class="samp">Syntax-rules</span></samp>’ now allows vector patterns.
<li>Multiple-value returns, ‘<samp><span class="samp">eval</span></samp>’, and ‘<samp><span class="samp">dynamic-wind</span></samp>’ have
been added.
<li>The calls that are required to be implemented in a properly tail-recursive
fashion are defined explicitly.
<li>`‘<samp><span class="samp">@</span></samp>’' can be used within identifiers. `‘<samp><span class="samp">|</span></samp>’' is reserved
for possible future extensions.
</ul>
<!-- %R4%% -->
<!-- \subsection*{Keywords as variable names} -->
<!-- Some implementations allow arbitrary syntactic -->
<!-- keywords \index{keyword}\index{syntactic keyword}to be used as variable -->
<!-- names, instead of reserving them, as this report would have -->
<!-- it.\index{variable} But this creates ambiguities in the interpretation -->
<!-- of expressions: for example, in the following, it's not clear whether -->
<!-- the expression {\tt (if 1 2 3)} should be treated as a procedure call or -->
<!-- as a conditional. -->
<!-- \begin{scheme} -->
<!-- (define if list) -->
<!-- (if 1 2 3) \ev 2 {\em{}or} (1 2 3)% -->
<!-- \end{scheme} -->
<!-- These ambiguities are usually resolved in some consistent way within any -->
<!-- given implementation, but no particular treatment stands out as being -->
<!-- clearly superior to any other, so these situations were excluded for the -->
<!-- purposes of this report. -->
<!-- %R4%% -->
<!-- \subsection*{Macros} -->
<!-- Scheme does not have any standard facility for defining new kinds of -->
<!-- expressions.\index{macros} -->
<!-- \vest The ability to alter the syntax of the language creates -->
<!-- numerous problems. All current implementations of Scheme have macro -->
<!-- facilities that solve those problems to one degree or another, but the -->
<!-- solutions are quite different and it isn't clear at this time which -->
<!-- solution is best, or indeed whether any of the solutions are truly -->
<!-- adequate. Rather than standardize, we are encouraging implementations -->
<!-- to continue to experiment with different solutions. -->
<!-- \vest The main problems with traditional macros are: They must be -->
<!-- defined to the system before any code using them is loaded; this is a -->
<!-- common source of obscure bugs. They are usually global; macros can be -->
<!-- made to follow lexical scope rules \todo{flushed: ``as in Common -->
<!-- Lisp's {\tt macrolet}''; OK?}, but many people find the resulting scope rules -->
<!-- confusing. Unless they are written very carefully, macros are -->
<!-- vulnerable to inadvertent capture of free variables; to get around this, -->
<!-- for example, macros may have to generate code in which procedure values -->
<!-- appear as quoted constants. There is a similar problem with syntactic -->
<!-- keywords if the keywords of special forms are not reserved. If keywords -->
<!-- are reserved, then either macros introduce new reserved words, -->
<!-- invalidating old code, or else special forms defined by the programmer -->
<!-- do not have the same status as special forms defined by the system. -->
<!-- \todo{Refer to Pitman's special forms paper.} -->
<!-- \todo{Pitman sez: Discuss importance of having a small number of special forms -->
<!-- so that programs can inspect each other.} -->
<!-- @include{repository} -->
</body></html>
|