This file is indexed.

/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:&nbsp;<a rel="previous" accesskey="p" href="Notes.html#Notes">Notes</a>,
Up:&nbsp;<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 &ldquo;Revised^4 report&rdquo; [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 &lsquo;<samp><span class="samp">load</span></samp>&rsquo;,
&lsquo;<samp><span class="samp">with-input-from-file</span></samp>&rsquo;, &lsquo;<samp><span class="samp">with-output-to-file</span></samp>&rsquo;,
&lsquo;<samp><span class="samp">transcript-on</span></samp>&rsquo;, &lsquo;<samp><span class="samp">transcript-off</span></samp>&rsquo;, and
&lsquo;<samp><span class="samp">interaction-environment</span></samp>&rsquo;,
and &lsquo;<samp><span class="samp">-</span></samp>&rsquo; and &lsquo;<samp><span class="samp">/</span></samp>&rsquo; 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>&lsquo;<samp><span class="samp">Syntax-rules</span></samp>&rsquo; now allows vector patterns.

     <li>Multiple-value returns, &lsquo;<samp><span class="samp">eval</span></samp>&rsquo;, and &lsquo;<samp><span class="samp">dynamic-wind</span></samp>&rsquo; have
been added.

     <li>The calls that are required to be implemented in a properly tail-recursive
fashion are defined explicitly.

     <li>`&lsquo;<samp><span class="samp">@</span></samp>&rsquo;' can be used within identifiers. `&lsquo;<samp><span class="samp">|</span></samp>&rsquo;' 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>