r7rs-small-texinfo

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit f6b9e8cb856eae7cd55efc1f55df1cf5d15a0903
parent ded2cdb286d6516cad54df4d19379b403390c557
Author: Wolfgang Corcoran-Mathe <wcm@sigwinch.xyz>
Date:   Sun, 28 Jan 2024 16:11:49 -0500

Delete junk character throughout.

Diffstat:
Mdoc/r7rs-small/r7rs-small.texinfo | 278++++++++++++++++++++++++++++++++++++++++----------------------------------------
1 file changed, 139 insertions(+), 139 deletions(-)

diff --git a/doc/r7rs-small/r7rs-small.texinfo b/doc/r7rs-small/r7rs-small.texinfo @@ -47,7 +47,7 @@ December 19, 2022 The report gives a defining description of the programming language Scheme. Scheme is a statically scoped and properly tail recursive dialect of the Lisp programming language -[23] invented by Guy Lewis Steele Jr.​ ​and Gerald Jay Sussman. It was designed to have +[23] invented by Guy Lewis Steele Jr. and Gerald Jay Sussman. It was designed to have exceptionally clear and simple semantics and few different ways to form expressions. A wide variety of programming paradigms, including imperative, functional, and object-oriented styles, find convenient expression in Scheme. @@ -74,9 +74,9 @@ Appendix B provides a list of optional but standardized implementation feature n The report concludes with a list of references and an alphabetic index. - Note: The editors of the R5RS​ ​and R6RS​ ​reports are listed as authors of this report in + Note: The editors of the R5RS and R6RS reports are listed as authors of this report in recognition of the substantial portions of this report that are copied directly from - R5RS​ ​and R6RS. There is no intended implication that those editors, individually or + R5RS and R6RS. There is no intended implication that those editors, individually or collectively, support or do not support this report. @menu @@ -227,7 +227,7 @@ with variables and expressions as well as with values. All objects created in the course of a Scheme computation, including procedures and continuations, have unlimited extent. No Scheme object is ever destroyed. The reason -that implementations of Scheme do not (usually!)​ ​run out of storage is that they are +that implementations of Scheme do not (usually!) run out of storage is that they are permitted to reclaim the storage occupied by an object if they can prove that the object cannot possibly matter to any future computation. Implementations of Scheme are required to be properly tail-recursive. This allows the execution of an iterative @@ -602,7 +602,7 @@ single period) used in the list syntax is not an identifier. All implementations of Scheme must support the following extended identifier characters: -@code{!​ ​$ % & * + - . / :​ ​< = > ? @ ^ _ ~} +@code{! $ % & * + - . / : < = > ? @ ^ _ ~} Alternatively, an identifier can be represented by a sequence of zero or more characters enclosed within vertical lines (|), analogous to string literals. @@ -680,7 +680,7 @@ whitespace. A semicolon (;) indicates the start of a line comment.The comment continues to the end of the line on which the semicolon appears. Another way to indicate a comment is to -prefix a <datum> (cf.​ ​section 7.1.2) with #;and optional <whitespace>. The comment +prefix a <datum> (cf. section 7.1.2) with #;and optional <whitespace>. The comment consists of the comment prefix #;, the space, and the <datum> together. This notation is useful for “commenting out” sections of code. @@ -708,7 +708,7 @@ For a description of the notations used for numbers, see section 6.2. @table @t -@item @t{.​ ​+ -} +@item @t{. + -} These are used in numbers, and can also occur anywhere in an identifier. A delimited plus or minus sign by itself is also an identifier. A delimited period (not occurring within a number or identifier) is used in the notation for pairs (section 6.4), and to @@ -882,7 +882,7 @@ consisting of the integers 8 and 13 is the sequence of characters “(8 13)”. The external representation of an object is not necessarily unique. The integer 28 also has representations “#e28.000” and “#x1c”, and the list in the previous paragraph also has the -representations “( 08 13 )” and “(8 .​ ​(13 .​ ​()))” (see section 6.4). +representations “( 08 13 )” and “(8 . (13 . ()))” (see section 6.4). Many objects have standard external representations, but some, such as procedures, do not have standard representations (although particular implementations may define @@ -1167,7 +1167,7 @@ they need not be quoted. @end example As noted in section 3.4, it is an error to attempt to alter a constant (i.e. the value -of a literal expression) using a mutation procedure like set-car!​ ​or string-set!. +of a literal expression) using a mutation procedure like set-car! or string-set!. @node Procedure calls @subsection Procedure calls @@ -1253,7 +1253,7 @@ will be returned as the results of the procedure call. called, the sequence of actual arguments is converted into a newly allocated list, and the list is stored in a fresh location that is bound to <variable>. -* (<variable1> … <variablen>​ ​. <variablen+1>): If a space-delimited period precedes the last +* (<variable1> … <variablen> . <variablen+1>): If a space-delimited period precedes the last variable, then the procedure takes n or more arguments, where n is the number of formal arguments before the period (it is an error if there is not at least one). The value stored in the binding of the last variable will be a newly allocated list of the actual @@ -1304,7 +1304,7 @@ syntax: (set! <variable> <expression>) Semantics: <Expression> is evaluated, and the resulting value is stored in the location to which <variable> is bound. It is an error if <variable> is not bound either in some -regionenclosing the set!​ ​expression or else globally. The result of the set! expression is +regionenclosing the set! expression or else globally. The result of the set! expression is unspecified. @example @@ -2523,7 +2523,7 @@ them. The simplest kind of variable definition takes one of the following forms: (define <variable> (lambda (<formals>) <body>)). -* (define (<variable> .​ ​<formal>) <body>) +* (define (<variable> . <formal>) <body>) <Formal> is a single variable. This form is equivalent to @@ -2542,10 +2542,10 @@ them. The simplest kind of variable definition takes one of the following forms: At the outermost level of a program, a definition (define <variable> <expression>)has essentially the same effect as the assignment -expression (set!​ ​<variable> <expression>)if <variable> is bound to a non-syntax value. +expression (set! <variable> <expression>)if <variable> is bound to a non-syntax value. However, if <variable> is not bound, or is a syntactic keyword, then the definition will bind <variable> to a new location before performing the assignment, whereas it would be an -error to perform a set!​ ​on an unboundvariable. +error to perform a set! on an unboundvariable. (define add3 (lambda (x) (+ x 3))) @@ -2979,7 +2979,7 @@ the object are fresh. A predicate is a procedure that always returns a boolean value (#t or #f). An equivalence predicate is the computational analogue of a mathematical equivalence relation; it is symmetric, reflexive, and transitive. Of the equivalence predicates described in this -section, eq?​ ​is the finest or most discriminating, equal?​ ​is the coarsest, and eqv?​ ​is +section, eq? is the finest or most discriminating, equal? is the coarsest, and eqv? is slightly less discriminating than eq?. procedure: (eqv? @@ -3122,7 +3122,7 @@ value returned by eqv? must be a boolean. (eqv? +nan.0 +nan.0) ⟹ unspecified Note that (eqv? 0.0 -0.0) will return #f if negative zero is distinguished, and #t if negative zero is not distinguished. -The next set of examples shows the use of eqv?​ ​with procedures that have local state. The +The next set of examples shows the use of eqv? with procedures that have local state. The gen-counter procedure must return a distinct procedure every time, since each procedure has its own internal counter. The gen-loser procedure, however, returns operationally equivalent procedures each time, since the local state does not affect the @@ -3180,13 +3180,13 @@ obj1 obj2) -The eq?​ ​procedure is similar to eqv?​ ​except that in some cases it is capable of discerning -distinctions finer than those detectable by eqv?. It must always return #f when eqv?​ ​also -would, but may return #f in some cases where eqv?​ ​would return #t. +The eq? procedure is similar to eqv? except that in some cases it is capable of discerning +distinctions finer than those detectable by eqv?. It must always return #f when eqv? also +would, but may return #f in some cases where eqv? would return #t. On symbols, booleans, the empty list, pairs, and records, and also on non-empty strings, -vectors, and bytevectors, eq?​ ​and eqv?​ ​are guaranteed to have the same behavior. On -procedures, eq?​ ​must return true if the arguments’ location tags are equal. On numbers +vectors, and bytevectors, eq? and eqv? are guaranteed to have the same behavior. On +procedures, eq? must return true if the arguments’ location tags are equal. On numbers and characters, eq?’s behavior is implementation-dependent, but it will always return either true or false. On empty strings, empty vectors, and empty bytevectors, eq? may also behave differently from eqv?. @@ -3209,10 +3209,10 @@ behave differently from eqv?. (let ((p (lambda (x) x))) (eq? p p)) ⟹ #t - Rationale: It will usually be possible to implement eq?​ ​much more efficiently than + Rationale: It will usually be possible to implement eq? much more efficiently than eqv?, for example, as a simple pointer comparison instead of as some more - complicated operation. One reason is that it is not always possible to compute eqv?​ - ​of two numbers in constant time, whereas eq?​ ​implemented as pointer comparison + complicated operation. One reason is that it is not always possible to compute eqv? + of two numbers in constant time, whereas eq? implemented as pointer comparison will always finish in constant time. procedure: (equal? @@ -3228,7 +3228,7 @@ trees are equal (in the sense of equal?) as ordered trees, and #f otherwise. It same as eqv? when applied to booleans, symbols, numbers, characters, ports, procedures, and the empty list. If two objects are eqv?, they must be equal? as well. In all other cases, equal? may return either #t or #f. Even if its arguments are circular data -structures, equal?​ ​must always terminate. +structures, equal? must always terminate. (equal? 'a 'a) ⟹ #t (equal? '(a) '(a)) ⟹ #t @@ -3270,7 +3270,7 @@ numbers. Mathematically, numbers are arranged into a tower of subtypes in which each level is a subset of the level above it: -​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​number + number complex number real number rational number @@ -4413,7 +4413,7 @@ restriction may be reported. These procedures implement the natural one-to-one correspondence between exact and inexact integers throughout an implementation-dependent range. See section 6.2.3. - Note: These procedures were known in R5RS​ ​as exact->inexact and inexact->exact, + Note: These procedures were known in R5RS as exact->inexact and inexact->exact, respectively, but they have always accepted arguments of any exactness. The new names are clearer and shorter, as well as being compatible with R6RS. @@ -4507,7 +4507,7 @@ string. The rules used by a particular implementation for string->number must also be applied to read and to the routine that reads programs, in order to maintain consistency between internal numeric processing, I/O, and the processing of - programs. As a consequence, the R5RS​ ​permission to return #f when + programs. As a consequence, the R5RS permission to return #f when string has an explicit radix prefix has been withdrawn. @@ -4575,7 +4575,7 @@ Returns #t if all the arguments are #t or all are #f. A pair (sometimes called a dotted pair) is a record structure with two fields called the car and cdr fields (for historical reasons). Pairs are created by the procedure cons. The car and cdr fields are accessed by the procedures car and cdr. The car and cdr fields are -assigned by the procedures set-car!​ ​and set-cdr!. +assigned by the procedures set-car! and set-cdr!. Pairs are used primarily to represent lists. A list can be defined recursively as either the empty listor a pair whose cdr is a list. More precisely, the set of lists is defined as the @@ -4611,7 +4611,7 @@ length is zero. The most general notation (external representation) for Scheme pairs is the “dotted” notation ( -c1 .​ ​ +c1 . c2) @@ -4619,8 +4619,8 @@ where c1 is the value of the car field and -c2 is the value of the cdr field. For example (4 .​ ​5) is a pair whose car is 4 and whose cdr is -5. Note that (4 .​ ​5) is the external representation of a pair, not an expression that +c2 is the value of the cdr field. For example (4 . 5) is a pair whose car is 4 and whose cdr is +5. Note that (4 . 5) is the external representation of a pair, not an expression that evaluates to a pair. A more streamlined notation can be used for lists: the elements of the list are simply @@ -4936,7 +4936,7 @@ list. If obj does not occur in -list, then #f (not the empty list) is returned. The memq procedure uses eq?​ ​to compare +list, then #f (not the empty list) is returned. The memq procedure uses eq? to compare obj with the elements of @@ -4973,12 +4973,12 @@ obj, and returns that pair. If no pair in alist has -obj as its car, then #f (not the empty list) is returned. The assq procedure uses eq?​ ​to +obj as its car, then #f (not the empty list) is returned. The assq procedure uses eq? to compare obj with the car fields of the pairs in -alist, while assv uses eqv?​ ​and assoc uses +alist, while assv uses eqv? and assoc uses compare if given and equal? otherwise. @@ -5277,8 +5277,8 @@ char2 char3 …) -These procedures are similar to char=?​ ​et cetera, but they treat upper case and lower -case letters as the same. For example, (char-ci=?​ ​#\A #\a) returns #t. +These procedures are similar to char=? et cetera, but they treat upper case and lower +case letters as the same. For example, (char-ci=? #\A #\a) returns #t. Specifically, these procedures behave as if char-foldcase were applied to their arguments before they were compared. @@ -5590,7 +5590,7 @@ These predicates are required to be transitive. These procedures compare strings in an implementation-defined way. One approach is to make them the lexicographic extensions to strings of the corresponding orderings on characters. In that case, string<? would be the lexicographic ordering on strings induced -by the ordering char<?​ ​on characters, and if the two strings differ in length but are the +by the ordering char<? on characters, and if the two strings differ in length but are the same up to the length of the shorter string, the shorter string would be considered to be lexicographically less than the longer string. However, it is also permitted to use the natural ordering imposed by the implementation’s internal representation of strings, or @@ -5654,7 +5654,7 @@ start and end. list->string returns a newly allocated string formed from the elements in the list list. In both procedures, order is preserved. string->list and list->string are inverses so -far as equal?​ ​is concerned. +far as equal? is concerned. procedure: (string-copy string) procedure: (string-copy string start) @@ -6164,7 +6164,7 @@ end and returns the corresponding bytevector. This section describes various primitive procedures which control the flow of program execution in special ways. Procedures in this section that invoke procedure arguments always do so in the same dynamic environment as the call of the original procedure. The -procedure?​ ​predicate is also described here. +procedure? predicate is also described here. procedure: (procedure? obj) @@ -6808,7 +6808,7 @@ r5rs library procedure: (scheme-report-environment version) If version is equal to 5, corresponding to R5RS, scheme-report-environment returns a -specifier for an environment that contains only the bindings defined in the R5RS​ ​library. +specifier for an environment that contains only the bindings defined in the R5RS library. Implementations must support this value of version. @@ -6831,7 +6831,7 @@ If version is equal to 5, corresponding to R5RS, the null-environment procedure returns a specifier for an environment that contains only the bindings for all syntactic keywords -defined in the R5RS​ ​library. Implementations must support this value of +defined in the R5RS library. Implementations must support this value of version. @@ -7177,8 +7177,8 @@ port is at end of file then char-ready? returns #t. Rationale: The char-ready? procedure exists to make it possible for a program to accept characters from interactive ports without getting stuck waiting for input. Any input editors associated with such ports must ensure that characters whose - existence has been asserted by char-ready?​ ​cannot be removed from the input. If - char-ready?​ ​were to return #f at end of file, a port at end of file would be + existence has been asserted by char-ready? cannot be removed from the input. If + char-ready? were to return #f at end of file, a port at end of file would be indistinguishable from an interactive port that has no ready characters. procedure: (read-string k) @@ -7221,7 +7221,7 @@ the given port is guaranteed not to hang. If the -port is at end of file then u8-ready?​ ​returns #t. +port is at end of file then u8-ready? returns #t. procedure: (read-bytevector k) procedure: (read-bytevector k port) @@ -7628,12 +7628,12 @@ sequence are equivalent to identifiers containing the corresponding character. <line ending> ⟶<newline> ∣<return> <newline> ∣<return> <comment> ⟶; ⟨all subsequent characters up to a -​ ​line ending⟩ ∣<nested comment> + line ending⟩ ∣<nested comment> ∣#; <intertoken space> <datum> <nested comment> ⟶#| <comment text> <comment cont>* |# <comment text> ⟶⟨character sequence not containing -​ ​#| or |#⟩ + #| or |#⟩ <comment cont> ⟶<nested comment> <comment text> <directive> ⟶#!fold-case ∣#!no-fold-case Note that it is ungrammatical to follow a <directive> with anything but a <delimiter> or the end of file. @@ -7733,7 +7733,7 @@ string that parses as an <expression> will also parse as a <datum>. ∣<character> ∣<string> ∣<symbol> ∣<bytevector> <symbol> ⟶<identifier> <compound datum> ⟶<list> ∣<vector> ∣<abbreviation> -<list> ⟶(<datum>*) ∣(<datum>+ .​ ​<datum>) +<list> ⟶(<datum>*) ∣(<datum>+ . <datum>) <abbreviation> ⟶<abbrev prefix> <datum> <abbrev prefix> ⟶' ∣` ∣, ∣,@ <vector> ⟶#(<datum>*) @@ -7765,7 +7765,7 @@ them have been redefined or shadowed. <operand> ⟶<expression> <lambda expression> ⟶(lambda <formals> <body>) <formals> ⟶(<identifier>*) ∣<identifier> -∣(<identifier>+ .​ ​<identifier>) +∣(<identifier>+ . <identifier>) <body> ⟶<definition>* <sequence> <sequence> ⟶<command>* <expression> <command> ⟶<expression> @@ -7844,7 +7844,7 @@ following rules for D = 1, 2, 3, …, where D is the nesting depth. ∣<vector qq template D> ∣<unquotation D> <list qq template D> ⟶(<qq template or splice D>*) -∣(<qq template or splice D>+ .​ ​<qq template D>) +∣(<qq template or splice D>+ . <qq template D>) ∣'<qq template D> ∣<quasiquotation D + 1> <vector qq template D> ⟶#(<qq template or splice D>*) @@ -7865,7 +7865,7 @@ The interpretation as an <unquotation> or <splicing unquotation D> takes precede <transformer spec> ⟶ (syntax-rules (<identifier>*) <syntax rule>*) ∣(syntax-rules <identifier> (<identifier>*) - ​ ​​ ​<syntax rule>*) + <syntax rule>*) <syntax rule> ⟶(<pattern> <template>) <pattern> ⟶<pattern identifier> ∣<underscore> @@ -7873,7 +7873,7 @@ The interpretation as an <unquotation> or <splicing unquotation D> takes precede ∣(<pattern>+ . <pattern>) ∣(<pattern>* <pattern> <ellipsis> <pattern>*) ∣(<pattern>* <pattern> <ellipsis> <pattern>* - ​ ​​ ​. <pattern>) + . <pattern>) ∣#(<pattern>*) ∣#(<pattern>* <pattern> <ellipsis> <pattern>*) ∣<pattern datum> @@ -7884,7 +7884,7 @@ The interpretation as an <unquotation> or <splicing unquotation D> takes precede ∣<bytevector> <template> ⟶<pattern identifier> ∣(<template element>*) -∣(<template element>+ .​ ​<template>) +∣(<template element>+ . <template>) ∣#(<template element>*) ∣<template datum> <template element> ⟶<template> @@ -7906,10 +7906,10 @@ The interpretation as an <unquotation> or <splicing unquotation D> takes precede ∣<syntax definition> ∣(define-values <formals> <body>) ∣(define-record-type <identifier> - ​ ​​ ​<constructor> <identifier> <field spec>*) + <constructor> <identifier> <field spec>*) ∣(begin <definition>*) <def formals> ⟶<identifier>* -∣<identifier>* .​ ​<identifier> +∣<identifier>* . <identifier> <constructor> ⟶(<identifier> <field name>*) <field spec> ⟶(<field name> <accessor>) ∣(<field name> <accessor> <mutator>) @@ -8560,12 +8560,12 @@ convenient abbreviations. append apply assoc assq assv begin - binary-port?​ ​ boolean=? - boolean?​ ​ bytevector + binary-port? boolean=? + boolean? bytevector bytevector-append bytevector-copy bytevector-copy! bytevector-length bytevector-u8-ref bytevector-u8-set! - bytevector?​ ​ caar + bytevector? caar cadr call-with-current-continuation call-with-port call-with-values @@ -8573,12 +8573,12 @@ convenient abbreviations. case cdar cddr cdr ceiling char->integer - char-ready?​ ​ char<=? - char<?​ ​ char=? - char>=?​ ​ char>? - char?​ ​ close-input-port + char-ready? char<=? + char<? char=? + char>=? char>? + char? close-input-port close-output-port close-port - complex?​ ​ cond + complex? cond cond-expand cons current-error-port current-input-port current-output-port define @@ -8586,13 +8586,13 @@ convenient abbreviations. define-values denominator do dynamic-wind else eof-object - eof-object?​ ​ eq? - equal?​ ​ eqv? + eof-object? eq? + equal? eqv? error error-object-irritants error-object-message error-object? - even?​ ​ exact + even? exact exact-integer-sqrt exact-integer? - exact?​ ​ expt + exact? expt features file-error? floor floor-quotient floor-remainder floor/ @@ -8601,9 +8601,9 @@ convenient abbreviations. get-output-string guard if include include-ci inexact - inexact?​ ​ input-port-open? - input-port?​ ​ integer->char - integer?​ ​ lambda + inexact? input-port-open? + input-port? integer->char + integer? lambda lcm length let let* let*-values let-syntax @@ -8619,25 +8619,25 @@ convenient abbreviations. max member memq memv min modulo - negative?​ ​ newline + negative? newline not null? number->string number? numerator odd? open-input-bytevector open-input-string open-output-bytevector open-output-string or output-port-open? - output-port?​ ​ pair? + output-port? pair? parameterize peek-char peek-u8 port? - positive?​ ​ procedure? + positive? procedure? quasiquote quote quotient raise raise-continuable rational? rationalize read-bytevector read-bytevector! read-char - read-error?​ ​ read-line + read-error? read-line read-string read-u8 - real?​ ​ remainder + real? remainder reverse round set! set-car! set-cdr! square @@ -8649,15 +8649,15 @@ convenient abbreviations. string-for-each string-length string-map string-ref string-set! string<=? - string<?​ ​ string=? - string>=?​ ​ string>? - string?​ ​ substring + string<? string=? + string>=? string>? + string? substring symbol->string symbol=? - symbol?​ ​ syntax-error + symbol? syntax-error syntax-rules textual-port? truncate truncate-quotient truncate-remainder truncate/ - u8-ready?​ ​ unless + u8-ready? unless unquote unquote-splicing utf8->string values vector vector->list @@ -8666,7 +8666,7 @@ convenient abbreviations. vector-fill! vector-for-each vector-length vector-map vector-ref vector-set! - vector?​ ​ when + vector? when with-exception-handler write-bytevector write-char write-string write-u8 zero? @@ -8683,16 +8683,16 @@ The (scheme case-lambda) library exports the case-lambda syntax. The (scheme char) library provides the procedures for dealing with characters that involve potentially large tables when supporting all of Unicode. - char-alphabetic?​ ​ char-ci<=? - char-ci<?​ ​ char-ci=? - char-ci>=?​ ​ char-ci>? + char-alphabetic? char-ci<=? + char-ci<? char-ci=? + char-ci>=? char-ci>? char-downcase char-foldcase - char-lower-case?​ ​ char-numeric? + char-lower-case? char-numeric? char-upcase char-upper-case? - char-whitespace?​ ​ digit-value - string-ci<=?​ ​ string-ci<? - string-ci=?​ ​ string-ci>=? - string-ci>?​ ​ string-downcase + char-whitespace? digit-value + string-ci<=? string-ci<? + string-ci=? string-ci>=? + string-ci>? string-downcase string-foldcase string-upcase @node Complex Library @@ -8754,8 +8754,8 @@ inexact values. acos asin atan cos exp finite? - infinite?​ ​ log - nan?​ ​ sin + infinite? log + nan? sin sqrt tan @node Lazy Library @subsection Lazy Library @@ -8819,7 +8819,7 @@ The (scheme write) library provides procedures for writing Scheme objects. The (scheme r5rs) library provides the identifiers defined by R5RS, except that transcript-on and transcript-off are not present. Note that the exact and inexact -procedures appear under their R5RS​ ​names inexact->exact and exact->inexact +procedures appear under their R5RS names inexact->exact and exact->inexact respectively. However, if an implementation does not provide a particular library such as the complex library, the corresponding identifiers will not appear in this library either. @@ -8835,7 +8835,7 @@ the complex library, the corresponding identifiers will not appear in this libra asin assoc assq assv atan begin - boolean?​ ​ caaaar + boolean? caaaar caaadr caaar caadar caaddr caadr caar @@ -8855,16 +8855,16 @@ the complex library, the corresponding identifiers will not appear in this libra cddddr cdddr cddr cdr ceiling char->integer - char-alphabetic?​ ​ char-ci<=? - char-ci<?​ ​ char-ci=? - char-ci>=?​ ​ char-ci>? + char-alphabetic? char-ci<=? + char-ci<? char-ci=? + char-ci>=? char-ci>? char-downcase char-lower-case? - char-numeric?​ ​ char-ready? + char-numeric? char-ready? char-upcase char-upper-case? - char-whitespace?​ ​ char<=? - char<?​ ​ char=? - char>=?​ ​ char>? - char?​ ​ close-input-port + char-whitespace? char<=? + char<? char=? + char>=? char>? + char? close-input-port close-output-port complex? cond cons cos current-input-port @@ -8873,15 +8873,15 @@ the complex library, the corresponding identifiers will not appear in this libra denominator display do dynamic-wind else eof-object? - eq?​ ​ equal? - eqv?​ ​ eval - even?​ ​ exact->inexact - exact?​ ​ exp + eq? equal? + eqv? eval + even? exact->inexact + exact? exp expt floor for-each force gcd if imag-part inexact->exact - inexact?​ ​ input-port? + inexact? input-port? integer->char integer? interaction-environment lambda lcm length @@ -8890,7 +8890,7 @@ the complex library, the corresponding identifiers will not appear in this libra letrec-syntax list list->string list->vector list-ref list-tail - list?​ ​ load + list? load log magnitude make-polar make-rectangular make-string make-vector @@ -8904,13 +8904,13 @@ the complex library, the corresponding identifiers will not appear in this libra numerator odd? open-input-file open-output-file or output-port? - pair?​ ​ peek-char - positive?​ ​ procedure? + pair? peek-char + positive? procedure? quasiquote quote quotient rational? rationalize read read-char real-part - real?​ ​ remainder + real? remainder reverse round scheme-report-environment set! set-car! @@ -8918,16 +8918,16 @@ the complex library, the corresponding identifiers will not appear in this libra sqrt string string->list string->number string->symbol string-append - string-ci<=?​ ​ string-ci<? - string-ci=?​ ​ string-ci>=? - string-ci>?​ ​ string-copy + string-ci<=? string-ci<? + string-ci=? string-ci>=? + string-ci>? string-copy string-fill! string-length string-ref string-set! - string<=?​ ​ string<? - string=?​ ​ string>=? - string>?​ ​ string? + string<=? string<? + string=? string>=? + string>? string? substring symbol->string - symbol?​ ​ syntax-rules + symbol? syntax-rules tan truncate values vector vector->list vector-fill! @@ -8944,7 +8944,7 @@ An implementation may provide any or all of the feature identifiers listed below cond-expand and features, but must not provide a feature identifier if it does not provide the corresponding feature. -r7rsAll R7RS​ ​Scheme implementations have this feature. +r7rsAll R7RS Scheme implementations have this feature. exact-closedThe algebraic operations +, -, *, and expt where the second argument is a non-negative integer produce exact values given exact inputs. @@ -9001,9 +9001,9 @@ This list is not authoritative, but is believed to be correct and complete. * The syntax-rules construct now recognizes _ (underscore) as a wildcard, which means it cannot be used as a syntax variable. It can still be used as a literal. -* The R5RS​ ​procedures exact->inexact and inexact->exact have been renamed to their - R6RS​ ​names, inexact and exact, respectively, as these names are shorter and more - correct. The former names are still available in the R5RS​ ​library. +* The R5RS procedures exact->inexact and inexact->exact have been renamed to their + R6RS names, inexact and exact, respectively, as these names are shorter and more + correct. The former names are still available in the R5RS library. * The guarantee that string comparison (with string<? and the related predicates) is a lexicographical extension of character comparison (with char<? and the related @@ -9027,14 +9027,14 @@ report” [20]. This list is not authoritative, but is believed to be correct and complete. -* Various minor ambiguities and unclarities in R5RS​ ​have been cleaned up. +* Various minor ambiguities and unclarities in R5RS have been cleaned up. * Libraries have been added as a new program structure to improve encapsulation and sharing of code. Some existing and new identifiers have been factored out into separate libraries. Libraries can be imported into other libraries or main programs, with controlled exposure and renaming of identifiers. The contents of a library can be made conditional on the features of the implementation on which it is to be used. There is an - R5RS​ ​compatibility library. + R5RS compatibility library. * The expressions types include, include-ci, and cond-expand have been added to the base library; they have the same semantics as the corresponding library declarations. @@ -9083,7 +9083,7 @@ This list is not authoritative, but is believed to be correct and complete. all shared and circular structure. The display procedure must not loop on circular objects. -* The R6RS​ ​procedure eof-object has been added. Eof-objects are now required to be a +* The R6RS procedure eof-object has been added. Eof-objects are now required to be a disjoint type. * Syntax definitions are now allowed wherever variable definitions are. @@ -9111,11 +9111,11 @@ This list is not authoritative, but is believed to be correct and complete. * The convenience conditionals when and unless have been added. -* The behavior of eqv? on inexact numbers now conforms to the R6RS​ ​definition. +* The behavior of eqv? on inexact numbers now conforms to the R6RS definition. * When applied to procedures, eq? and eqv? are permitted to return different answers. -* The R6RS​ ​procedures boolean=? and symbol=? have been added. +* The R6RS procedures boolean=? and symbol=? have been added. * Positive infinity, negative infinity, NaN, and negative inexact zero have been added to the numeric tower as inexact values with the written representations +inf.0, -inf.0, @@ -9168,7 +9168,7 @@ This list is not authoritative, but is believed to be correct and complete. * Strings and symbols now allow mnemonic and numeric escape sequences, and the list of named characters has been extended. -* The procedures file-exists?​ ​and delete-file are available in the (scheme file) library. +* The procedures file-exists? and delete-file are available in the (scheme file) library. * An interface to the system environment, command line, and process exit status is available in the (scheme process-context) library. @@ -9196,16 +9196,16 @@ This section enumerates the incompatibilities between R7RS and the “Revised6 r This list is not authoritative, and is possibly incomplete. -* R7RS​ ​libraries begin with the keyword define-library rather than library in order to - make them syntactically distinguishable from R6RS​ ​libraries. In R7RS​ ​terms, the body of - an R6RS​ ​library consists of a single export declaration followed by a single import +* R7RS libraries begin with the keyword define-library rather than library in order to + make them syntactically distinguishable from R6RS libraries. In R7RS terms, the body of + an R6RS library consists of a single export declaration followed by a single import declaration, followed by commands and definitions. In R7RS, commands and definitions are not permitted directly within the body: they have to be wrapped in a begin library declaration. -* There is no direct R6RS​ ​equivalent of the include, include-ci, +* There is no direct R6RS equivalent of the include, include-ci, include-library-declarations, or cond-expand library declarations. On the other hand, - the R7RS​ ​library syntax does not support phase or version specifications. + the R7RS library syntax does not support phase or version specifications. * The grouping of standardized identifiers into libraries is different from the R6RS approach. In particular, procedures which are optional in R5RS either expressly or by @@ -9215,11 +9215,11 @@ This list is not authoritative, and is possibly incomplete. * No form of identifier syntax is provided. * Internal syntax definitions are allowed, but uses of a syntax form cannot appear before - its definition; the even/odd example given in R6RS​ ​is not allowed. + its definition; the even/odd example given in R6RS is not allowed. -* The R6RS​ ​exception system was incorporated as-is, but the condition types have been - left unspecified. In particular, where R6RS​ ​requires a condition of a specified type to be - signaled, R7RS​ ​says only “it is an error”, leaving the question of signaling open. +* The R6RS exception system was incorporated as-is, but the condition types have been + left unspecified. In particular, where R6RS requires a condition of a specified type to be + signaled, R7RS says only “it is an error”, leaving the question of signaling open. * Full Unicode support is not required. Normalization is not provided. Character comparisons are defined by Unicode, but string comparisons are @@ -9227,9 +9227,9 @@ This list is not authoritative, and is possibly incomplete. * The full numeric tower is optional as in R5RS, but optional support for IEEE infinities, NaN, and was adopted from R6RS. Most clarifications on numeric results were also - adopted, but the semantics of the R6RS​ ​procedures real?, rational?, and integer? were - not adopted. (Note that the R5RS/R7RS​ ​semantics are available in R6RS​ ​using - real-valued?, rational-valued?, and integer-valued?). The R6RS​ ​division operators div, + adopted, but the semantics of the R6RS procedures real?, rational?, and integer? were + not adopted. (Note that the R5RS/R7RS semantics are available in R6RS using + real-valued?, rational-valued?, and integer-valued?). The R6RS division operators div, mod, div-and-mod, div0, mod0 and div0-and-mod0 are not provided. * When a result is unspecified, it is still required to be a single value. However, non-final