This SRFI proposes SSRE, an alternative string-based syntax for Scheme Regular Expressions as defined by SRFI 115. String syntax is both compact and familiar to many regexp users; it is translated directly into SRE S-expressions, providing equivalent constructs. While the proposed syntax mostly follows PCRE, it takes into account specifics of Scheme string syntax and limitations of SRE, leaving out constructs that either duplicate functionality provided by Scheme strings or have no SRE equiva...| srfi.schemers.org
Title| srfi.schemers.org
263: Prototype Object System, by Daniel ZiltenerDraft: 2025-06-09Keywords: Object-Oriented ProgrammingSee also SRFI 20: Simple object system.| srfi.schemers.org
This SRFI proposes a "Self"-inspired prototype object system. Such an object system works by having prototype objects that are cloned repeatedly to modify, extend, and use them, and is interacted with by passing messages.| srfi.schemers.org
SRFI 261 is now in draft status.This SRFI proposal addresses systemic compatibility issues exposed by the library reference format defined in SRFI 97 (srfi :<SRFI number> <identifier> ...) and advocates for a modernized, portable alternative: (srfi srfi-<SRFI number> <identifier> ...).| Scheme Requests for Implementation
For most use cases, the use of the pattern matcher should produce code which is essentially as efficient at run time as equivalent procedural Scheme code would be, assuming a moderately optimizing Scheme implementation. This applies only when the equivalent code is also equivalently correct in terms of handling of error cases (i.e. including all type checks done automatically by the pattern matcher). However, using extension syntax should not cause this principle to be violated (provided the...| srfi.schemers.org
SRFI 105: Curly-infix-expressions| srfi.schemers.org
SRFI 259 is now in draft status.Tagged procedures are procedures with boxes attached, which can be used to create applicable records and other abstractions. This SRFI proposes a variant with the notion of a tagging protocol, analogous to a record type definition, for ensuring encapsulation and security for tagged procedures.| Scheme Requests for Implementation
SRFI 260 is now in draft status.This SRFI defines the procedure generate-symbol. Each time it is invoked, the procedure returns a new symbol whose name cannot be guessed. The returned symbol is a standard symbol for all purposes; it obeys write/read invariance and it is equal to another symbol if and only if their names are spelt the same.| Scheme Requests for Implementation
An uninterned symbol is not the same as any other symbol, even one with the same name. These symbols are useful in macro programming and in other situations where guaranteed-unique names are needed. A survey of uninterned and uniquely-named symbols in Scheme is also provided.| srfi.schemers.org
SRFI 110: Sweet-expressions (t-expressions)| srfi.schemers.org
Pattern matching extends Scheme's repertoire of conditional constructs, allowing decomposition of compound data structures and binding their parts to variables. This SRFI proposes one such construct, match, which provides all common-denominator functionality described in SRFI-200, adding on top of it support for non-linear patterns and backtracking. Also, the proposed construct is modular, and allows for convenient extension via the define-match-pattern mechanism.| srfi.schemers.org
Are SRFIs standards?| srfi.schemers.org
This SRFI describes a configuration language to| srfi.schemers.org
A SRFI 9-style define-record-type is specified which allows subtyping while preserving encapsulation, in that the field structure of supertypes remains an implementation detail with which subtypes need not concern themselves.| srfi.schemers.org
SRFI 255 is now in draft status.When an exceptional situation is encountered by a program, it may create a condition object describing the situation and then signal the condition and pass control to a condition handler. The signaler and handler are two different parts of a system, between which there is a barrier of abstraction. In order to recover gracefully and flexibly from exceptional situations, however, the signaler can provide multiple ways by which the handler can restart the computat...| Scheme Requests for Implementation
Guardians allow programs to protect objects from deallocation by the garbage collector and to determine which objects would otherwise have been deallocated. When the object has associated non-memory resources, a program can register it with a guardian. The GC will mark inaccessible objects but will not collect them; at the program's convenience, inaccessible objects are removed from the guardian and their non-memory resources are disposed of. Guardians allow objects to be saved from dealloca...| srfi.schemers.org
SRFI 253 is now in draft status. Data validation and type checking (supposedly) make for more correct code. And faster code too, sometimes. And, in rare cases, code that's easier to follow than the un-checked one. Unfortunately, Scheme does not have many (type-)checking primitives out of the box. This SRFI provides some, with the aim of allowing more performant and correct code with minimum effort on the user side. Both (manual) argument checking/validation (check-arg) and return value(s) (va...| Scheme Requests for Implementation
SRFI 251 is now in final status. Scheme has traditionally required procedure bodies and the bodies of derived constructs such as let to contain definitions followed by commands/expressions. This SRFI proposes to allow mixing commands and groups of definitions in such bodies, so that each command/expression is in the scope of all local definition groups preceding it, but not in scope of the local definition groups following it. This approach is backwards compatible with R7RS and upholds the in...| Scheme Requests for Implementation
SRFI 252 is now in final status.This defines an extension of the SRFI 64 test suite API to support property testing. It uses SRFI 158 generators to generate test inputs, which allows for the creation of custom input generators. It uses SRFI 194 as the source of random data, so that the generation of random test inputs can be made deterministic. For convenience, it also provides procedures to create test input generators for the types specified in R7RS-small. The interface to run property test...| Scheme Requests for Implementation
SRFI 245 is now in withdrawn status.Scheme has traditionally required procedure bodies and the bodies of derived constructs such as let to contain definitions followed by expressions. This SRFI proposes to allow expressions to appear before and intermingled with definitions in such bodies, as was allowed in program bodies by the R6RS and in library bodies by R7RS small.| Scheme Requests for Implementation
SRFI 247 is now in final status.This SRFI extends Scheme with a simple mechanism to implicitly add formal arguments to procedure definitions and to implicitly add arguments to procedure calls. Contrary to parameters (also known as fluids or dynamically bound variables), which can be used for the same purpose, no runtime overhead is generated.| Scheme Requests for Implementation
SRFI 243 is now in withdrawn status.This SRFI suggests how the Scheme reader and writer should handle unreadable data in general, and unreadable objects in particular.| Scheme Requests for Implementation
SRFI 250 is now in draft status.This SRFI defines an interface to hash tables, which are widely recognized as a fundamental data structure for a wide variety of applications. A hash table is a data structure that: Is disjoint from all other types. Provides a mapping from objects known as keys to corresponding objects known as values. Keys may be any Scheme objects in some kinds of hash tables, but are restricted in other kinds. Values may be any Scheme objects. Provides an equality predicate ...| Scheme Requests for Implementation
When an exceptional situation is encountered by a program, it may create a condition object describing the situation and then signal the condition and pass control to a condition handler. The signaler and handler are two different parts of a system, between which there is a barrier of abstraction. In order to recover gracefully and flexibly from exceptional situations, however, the signaler can provide multiple ways by which the handler can restart the computation, some of which may require e...| srfi.schemers.org
SRFI 242 is now in final status.This SRFI defines a language to describe control-flow graphs (CFGs) suitable for formulating iterative and recursive algorithms. Using the notion of a CFG term, this language can be seamlessly embedded in the Scheme language. Complex CFG terms can be composed from simple CFG terms.| Scheme Requests for Implementation
SRFI 248 is now in draft status. Scheme's exception system is extended so that exception handlers gain access to the delimited continuation representing the rest of the computation of the call of the thunk guarded by the handler. Algebraic effect handlers can be directly expressed in this extended exception system. The system directly implements the shift0/reset0 delimited control operators. It is well known that other delimited control operators like prompt0/control0 or reset/shift are expre...| Scheme Requests for Implementation
SRFI 246 is now in draft status.Guardians allow programs to protect objects from deallocation by the garbage collector and to determine which objects would otherwise have been deallocated. When the object has associated non-memory resources, a program can register it with a guardian. The GC will mark inaccessible objects but will not collect them; at the program's convenience, inaccessible objects are removed from the guardian and their non-memory resources are disposed of. Guardians allow ob...| Scheme Requests for Implementation
SRFI 154 is now in withdrawn status.Scheme has the notion of the dynamic extent of a procedure call. A number of standard Scheme procedures and syntaxes like dynamic-wind, call-with-current-continuation, and parameterize deal with the dynamic extent indirectly. The same holds true for the procedures and syntaxes dealing with continuation marks as defined by SRFI 157. This SRFI reifies the dynamic extent into a first-class value together with a well-defined procedural interface and a syntax to...| Scheme Requests for Implementation
SRFI 155 is now in withdrawn status. Scheme, like ML, is a programming language with strict evaluation while others, like Haskell, use lazy evaluation. Scheme, however, possesses the primitives delay and force that make it possible to express lazy algorithms. Lazy evaluation does not go well in conjunction with imperative, non-functional, side-effecting code. It should, however, be applicable in a purely functional setting. This is the case for the delayed evaluation model as described in the...| Scheme Requests for Implementation
SRFI 157 is now in withdrawn status. Continuation marks are a programming language feature that allows one to attach information to and retrieve information from continuations, generalizing stack inspection. Conceptually, a continuation consists of a number of frames where each frame stands for an active procedure call that is not a tail call. A continuation mark is then a key-value pair associated with a frame, with keys compared using eq?. At most one mark for a given key can be attached to...| Scheme Requests for Implementation
SRFI 237 is now in final status.The record mechanism of R6RS is refined. In particular, the triad of record names, record-type descriptors and record constructor descriptors can be effectively ignored and replaced with the single notion of a record descriptor. We also remove the restriction that the syntactic layer can only define one constructor per record type defined.| Scheme Requests for Implementation
SRFI 240 is now in final status.This SRFI defines a version of the define-record-type definition of R6RS and SRFI 237 that extends the define-record-type syntax of R7RS, reconciling both systems. This SRFI is meant to be adopted by R7RS-large to integrate essentially the R6RS record system compatibly with the existing R7RS-small record system.| Scheme Requests for Implementation
SRFI 153 is now in final status.Osets are immutable collections that can contain any Scheme objects as long as a total order exists among the objects. Osets enforce the constraint that no two elements can be the same in the sense of the oset's associated equality predicate. The elements in an oset appear in a fixed order determined by the comparator used to create it.| Scheme Requests for Implementation
SRFI 226 is now in final status.Whenever an expression is evaluated during the run of a Scheme program, there is a continuation awaiting the values of the expression. It is a distinguishing property of the Scheme programming language to offer a procedure (named call/cc) that captures the current continuation as a procedure, which, when called, aborts the then-current continuation and reinstates the captured one. One can visualize a continuation as a list of (continuation) frames where a non-t...| Scheme Requests for Implementation
SRFI 241 is now in final status. This SRFI describes a simple pattern matcher based on one originally devised by Kent Dybvig, Dan Friedman, and Eric Hilsdale, which has a catamorphism feature to perform recursion automatically.| Scheme Requests for Implementation
SRFI 235 is now in final status.This SRFI contains various procedures that accept and return procedures, as well as a few others, drawn from an earlier version of Chicken. Common Lisp has a few of them too, and more come from the Standard Prelude from Programming Praxis. Using these procedures helps to keep code terse and reduce the need for ad hoc lambdas.| Scheme Requests for Implementation
SRFI 244 is now in final status.A define-values form is a definition that binds multiple variables from a single expression returning multiple values.| Scheme Requests for Implementation
SRFI 239 is now in final status.This SRFI provides the list-case, the syntactic fundamental list destructor.| Scheme Requests for Implementation
SRFI 238 is now in final status.Many programming interfaces rely on a set of condition codes where each code has a numeric ID, a mnemonic symbol, and a human-readable message. This SRFI defines a facility to translate between numbers and symbols in a codeset and to fetch messages by code. Examples are given using the Unix errno and signal codesets.| Scheme Requests for Implementation
SRFI 228 is now in final status.Further procedures for defining SRFI 128 comparators. Best enjoyed in combination with SRFI 162.| Scheme Requests for Implementation
SRFI 236 is now in final status.This SRFI defines the independently syntax, which can be used to combine side effects into one expression without specifying their relative order.| Scheme Requests for Implementation
SRFI 233 is now in final status.An INI file is a configuration file that consists of key-value pairs for properties, and sections that group the properties. The name of these configuration files comes from the filename extension INI, short for initialization. The format has become an informal standard in many contexts of configuration. This SRFI provides access to the contents of an INI file.| Scheme Requests for Implementation
SRFI 225 is now in final status.The procedures of this SRFI allow callers to manipulate an object that maps keys to values without the caller needing to know exactly what the type of the object is. Such an object is called a dictionary or dict in this SRFI.| Scheme Requests for Implementation
SRFI 122 is now in withdrawn status.This SRFI specifies an array mechanism for Scheme. Arrays as defined here are quite general; at their most basic, an array is simply a mapping, or function, from multi-indices of exact integers $i_0,\ldots,i_{d-1}$ to Scheme values. The set of multi-indices $i_0,\ldots,i_{d-1}$ that are valid for a given array form the domain of the array. In this SRFI, each array's domain consists of a rectangular interval $[l_0,u_0)\times[l_1,u_1)\times\cdots\times[l_{d-1...| Scheme Requests for Implementation
SRFI 231 is now in final status.This SRFI specifies an array mechanism for Scheme. Arrays as defined here are quite general; at their most basic, an array is simply a mapping, or function, from multi-indices of exact integers $i_0,\ldots,i_{d-1}$ to Scheme values. The set of multi-indices $i_0,\ldots,i_{d-1}$ that are valid for a given array form the domain of the array. In this SRFI, each array's domain consists of the cross product of intervals of exact integers $[l_0,u_0)\times[l_1,u_1)\ti...| Scheme Requests for Implementation
SRFI 234 is now in draft status. Topological sorting is an algorithm that takes a graph consisting of nodes and other nodes that depend on them, forming a partial order, and returns a list representing a total ordering of the graph. If the graph is cyclic, the topological sort will fail. With the procedure topological-sort, failure results in returning #false and additional information is provided via multiple values.| Scheme Requests for Implementation
SRFI 200 is now in withdrawn status.This SRFI discusses some of the existing pattern-matching libraries for the Scheme programming language — namely, the pattern matcher presented by Andrew K. Wright and Robert Cartwright in the paper "A Soft Type System for Scheme", the pattern matcher developed by Dan Friedman, Erik Hilsdale and Kent Dybvig, the racket/match module distributed with the Racket programming environment, as well as the Bigloo and Gerbil pattern matchers distributed with t...| Scheme Requests for Implementation
SRFI 211 is now in final status.This SRFI describes common syntactic extensions of the syntax-rules macro facility of R5RS and the base R6RS and R7RS libraries. In particular, library namespaces are defined where these extensions can be located and which can be tested against in cond-expand forms.| Scheme Requests for Implementation
SRFI 232 is now in final status.Scheme lacks a flexible way to create and apply curried procedures. This SRFI describes curried, a variant of lambda that creates true curried procedures which also behave just like ordinary Scheme procedures. They can be applied to their arguments one by one, all at once, or anywhere in between, without any novel syntax. curried also supports nullary and variadic procedures, and procedures created with it have predictable behavior when applied to surplus argum...| Scheme Requests for Implementation
SRFI 205 is now in withdrawn status. This SRFI describes procedures for command-line and terminal interface programs to safely change and reset terminal modes, for example from cooked to raw and back, and for serial-line device manipulation for interfacing with embedded hardware and the like. It is intended to provide all the termios structure functionality a modern Scheme programmer might desire by supplying a stty procedure, and simple abstractions on top of it.| Scheme Requests for Implementation
SRFI 204 is now in withdrawn status.Pattern matching decomposes a compound data structure into parts and assigns those parts to variables. This SRFI describes a pattern-matching library already in use by several scheme implementations which can match many common compound data structures.| Scheme Requests for Implementation
SRFI 227 is now in final status.This SRFI specifies the opt-lambda syntax, which generalizes lambda. An opt-lambda expression evaluates to a procedure that takes a number of required and a number of optional (positional) arguments whose default values are determined by evaluating corresponding expressions when the procedure is called. This SRFI also specifies a variation opt*-lambda, which is to opt-lambda as let* is to let and the related binding constructs let-optionals and let-optionals*. ...| Scheme Requests for Implementation
SRFI 229 is now in final status.This SRFI defines tagged procedures, which are procedures that are tagged with a Scheme value when created through the syntax lambda/tag and case-lambda/tag. The value of the tag of a procedure can be retrieved with procedure-tag, and the predicate procedure/tag? discerns whether a procedure is tagged.| Scheme Requests for Implementation
SRFI 230 is now in final status.This SRFI defines atomic operations for the Scheme programming language. An atomic operation is an operation that, even in the presence of multiple threads, is either executed completely or not at all. Atomic operations can be used to implement mutexes and other synchronization primitives, and they can be used to make concurrent algorithms lock-free. For this, this SRFI defines two data types, atomic flags and atomic (fixnum) boxes, whose contents can be querie...| Scheme Requests for Implementation
SRFI 223 is now in final status.Generalized procedures for binary search of vector-like data structures are provided which can be applied to any sequence type, including ones defined by the user, together with applications of these procedures for Scheme’s built-in vectors.| Scheme Requests for Implementation
SRFI 222 is now in final status.Compound objects are analogous to R6RS compound conditions, and are suitable for use in creating and handling conditions on non-R6RS systems, among other purposes. They encapsulate an immutable sequence of subobjects, which can be any object except another compound object. It is possible to implement R6RS compound conditions on top of compound objects, but not vice versa. Note that this SRFI does not provide any analogue to R6RS simple conditions, which are jus...| Scheme Requests for Implementation
SRFI 224 is now in final status.Integer maps, or fxmappings, are finite sets, where each element is an association between a fixnum (exact integer) key and an arbitrary Scheme object. They are similar to the general mappings of SRFI 146, but the restricted key-type allows implementations of fxmappings to benefit from optimized structures and algorithms. This library provides a rich set of operations on fxmappings, including analogues of most of the forms provided by SRFI 146. Fxmappings have ...| Scheme Requests for Implementation
SRFI 221 is now in final status.This is a set of convenience routines for generators and accumulators intended to blend in with SRFI 158. The authors recommend that they be added to the (srfi 158) library provided by users or implementations. If they are approved by the R7RS-large process, they can also be added to (r7rs generator).| Scheme Requests for Implementation
SRFI 220 is now in withdrawn status.Many language-agnostic programming tools rely on specially formatted source code comments to annotate the code with metadata. Such "magic comments" are hard for both humans and computers to parse reliably, as the purpose of a comment is to be free-form text that is not interpreted by machine. This SRFI extends the standard Scheme directive syntax (#!) to support line directives. They look like magic comments to language-agnostic tools but read as S-expressi...| Scheme Requests for Implementation
SRFI 219 is now in final status.This SRFI codifies the following shorthand syntax, which some Scheme implementations have had for a long time. (define ((outer-name outer-args ...) inner-args ...) inner-body ...)| Scheme Requests for Implementation
SRFI 213 is now in final status.Using the define-property definition described in this SRFI, expand-time properties can be associated with identifiers in a referentially transparent and lexically scoped way.| Scheme Requests for Implementation
SRFI 214 is now in final status.A flexvector, also known as a dynamic array or an arraylist, is a mutable vector-like data structure with an adjustable size. Flexvectors allow fast random access and fast insertion/removal at the end. This SRFI defines a suite of operations on flexvectors, modeled after SRFI 133's vector operations.| Scheme Requests for Implementation
SRFI 208 is now in final status.This SRFI provides procedures that dissect NaN (Not a Number) inexact values.| Scheme Requests for Implementation
SRFI 217 is now in final status.Integer sets, or isets, are unordered collections of fixnums. (Fixnums are exact integers within certain implementation-specified bounds.)| Scheme Requests for Implementation
SRFI 210 is now in final status. This SRFI extends the Scheme standard with procedures and syntax dealing with multiple values, including syntax to create lists and vectors from expressions returning multiple values and procedures returning the elements of a list or vector as multiple values.| Scheme Requests for Implementation
SRFI 212 is now in final status.This SRFI introduces alias definitions, a syntactic extension. An alias definition transfers the binding of one identifier to another, effectively aliasing the identifier.| Scheme Requests for Implementation
SRFI 218 is now in withdrawn status.These procedures allow the creation and interpretation of numerals using any set of Unicode digits that support positional notation.| Scheme Requests for Implementation
SRFI 216 is now in final status. This SRFI follows SRFI 203 in providing "out-of-the-box" support for hosting the exercises suggested by Structure and Interpretation of Computer Programs in portable Scheme. Whereas SRFI 203 focused on the necessarily non-portable aspects of the problem set (the graphics), this SRFI aims to provide support for the rest of the features, which are far more widespread, often already provided, and in reality mostly need just a common vocabulary. This SRFI provides...| Scheme Requests for Implementation
SRFI 201 is now in final status.This document describes a handful of syntactic extensions to the core bindings of the Scheme programming language. In particular, it proposes to extend the binding forms lambda, let, let* with pattern matching capabilities, to extend the forms let and or with the ability to handle multiple values, and to extend the form define with the ability of defining "curried" functions.| Scheme Requests for Implementation
SRFI 215 is now in final status. This SRFI specifies a central log exchange for Scheme that connects log producers with log consumers. It allows multiple logging systems to interoperate and co-exist in the same program. Library code can produce log messages without knowledge of which log system is actually used. Simple applications can easily get logs on standard output, while more advanced applications can send them to a full logging system.| Scheme Requests for Implementation
SRFI 206 is now in final status.This SRFI defines a mechanism for defining auxiliary syntax keywords independently in different modules in such a way that they still have the same binding so that they can be used interchangeably as literal identifiers in syntax-rules and syntax-case expressions and can be both imported under the same name without conflicts.| Scheme Requests for Implementation
SRFI 209 is now in final status.Enums are objects that serve to form sets of distinct classes that specify different modes of operation for a procedure. Their use fosters portable and readable code.| Scheme Requests for Implementation
SRFI 202 is now in final status.The SRFI-2 library introduced the and-let* form for short-circuited evaluation in the style of the and form, with the ability to capture the (non-#f) results in the style of the let* form. This document extends the and-let* form with the ability to pattern-match (or "destructurally bind") the values of evaluated expressions (where the match failure causes short-circuiting rather than raising an error) and the ability to handle multiple values (where only the fa...| Scheme Requests for Implementation
SRFI 207 is now in final status.To ease the human reading and writing of Scheme code involving binary data that for mnemonic reasons corresponds as a whole or in part to ASCII-coded text, a notation for bytevectors is defined which allows printable ASCII characters to be used literally without being converted to their corresponding integer forms. In addition, this SRFI provides a set of procedures known as the bytestring library for constructing a bytevector from a sequence of integers, chara...| Scheme Requests for Implementation
SRFI 170 is now in final status. The host environment is the set of resources, such as the filesystem, network and processes, that are managed by the operating system on top of which a Scheme program is executing. This SRFI specifies some of the ways the host environment can be accessed from within a Scheme program. It does so by leveraging widespread support for POSIX, the Portable Operating System Interface standardized by the IEEE. Not all of the functions of this SRFI are available on all...| Scheme Requests for Implementation
SRFI 196 is now in final status.Ranges are collections somewhat similar to vectors, except that they are immutable and have algorithmic representations instead of the uniform per-element data structure of vectors. The storage required is usually less than the size of the same collection stored in a vector and the time needed to reference a particular element is typically less for a range than for the same collection stored in a list. This SRFI defines a large subset of the sequence operations...| Scheme Requests for Implementation
SRFI 203 is now in final status.This SRFI proposes a simple library for programmatic drawing of pictures compatible with Section 2.2.4 of Structure and Interpretation of Computer Programs. It aims to close the gap between the Scheme suggested for study in the book and portable Scheme.| Scheme Requests for Implementation
SRFI 197 is now in final status.Many functional languages provide pipeline operators, like Clojure's -> or OCaml's |>. Pipelines are a simple, terse, and readable way to write deeply-nested expressions. This SRFI defines a family of chain and nest pipeline operators, which can rewrite nested expressions like (a b (c d (e f g))) as a sequence of operations: (chain g (e f _) (c d _) (a b _)).| Scheme Requests for Implementation
SRFI 198 is now in withdrawn status. This SRFI provides means to construct, return or signal, and extract information from Scheme interfaces with "foreign" systems such as the POSIX API, databases, and libraries.| Scheme Requests for Implementation
SRFI 193 is now in final status.R6RS and R7RS define a command-line procedure. While a useful baseline, the specification is not detailed enough to cover all practical situations. This SRFI clarifies the definition of command-line and adds a few related procedures. Scheme scripts, standalone executables, compilation and REPL use are accounted for. Option parsing is out of scope.| Scheme Requests for Implementation
SRFI 181 is now in final status.This SRFI is derived from parts of library section 8.2.4, library section 8.2.7, library section 8.2.10, and library section 8.2.13 of the R6RS. These sections are themselves based on parts of SRFI 79, SRFI 80 and SRFI 81. These procedures provide a hook into the Scheme port system from below, allowing the creation of custom ports that behave as much as possible like the standard file, string, and bytevector ports, but that call a procedure to produce data to i...| Scheme Requests for Implementation
SRFI 186 is now in withdrawn status.This is an extract from the R6RS that documents its support for transcoders and transcoded ports. These provide a hook into the Scheme port system from below, allowing the creation of textual ports that provide non-default encoding and decoding from arbitrary binary ports. It has been lightly edited to fit R7RS style.| Scheme Requests for Implementation
SRFI 195 is now in final status. This SRFI extends the specification of the boxes of SRFI 111 so that they are multiple-values aware. Whereas a SRFI 111 box is limited in that it can only box a single value, multiple values can be boxed with this SRFI.| Scheme Requests for Implementation
SRFI 194 is now in final status.This SRFI defines a set of SRFI 158 generators and generator makers that yield random data of specific ranges and distributions. It is intended to be implemented on top of SRFI 27, which provides the underlying source of random integers and floats.| Scheme Requests for Implementation
SRFI 178 is now in final status.This SRFI describes a set of operations on homogeneous bitvectors. Operations analogous to those provided on the other homogeneous vector types described in SRFI 160 are provided, along with operations analogous to the bitwise operations of SRFI 151.| Scheme Requests for Implementation
SRFI 159 is now in withdrawn status.A library of procedures for formatting Scheme objects to text in various ways, and for easily concatenating, composing and extending these formatters efficiently without resorting to capturing and manipulating intermediate strings.| Scheme Requests for Implementation
SRFI 177 is now in withdrawn status.Many Scheme implementations have keyword arguments, but they have not been widely standardized. This SRFI defines the macros lambda/kw and call/kw. They can be used identically in every major implementation currently in use, making it safe to use keyword arguments in portable code. The macros expand to native keyword arguments in Schemes that have them, letting programmers mix portable code and implementation-specific code.| Scheme Requests for Implementation
SRFI 192 is now in final status.This is an extract from the R6RS that documents its support for positioning ports. Binary ports can be positioned to read or write at a specific byte; textual ports at a specific character, although character positions can't be synthesized portably. It has been lightly edited to fit R7RS style.| Scheme Requests for Implementation
SRFI 166 is now in final status. A library of procedures for formatting Scheme objects to text in various ways, and for easily concatenating, composing and extending these formatters efficiently without resorting to capturing and manipulating intermediate strings. This SRFI is an updated version of SRFI 159, primarily with the difference that state variables are hygienic. Summary of differences from SRFI 159: State variables are first class and hygienic Added written-shared, pretty-shared Add...| Scheme Requests for Implementation
SRFI 199 is now in withdrawn status.The majority of POSIX system and library calls require accessing errno to discern the specific cause of an error, and some require setting it to 0 before being called. This SRFI specifies procedures to both retrieve its value, and to set it.| Scheme Requests for Implementation
SRFI 189 is now in final status.This SRFI defines two disjoint immutable container types known as Maybe and Either, both of which can contain objects collectively known as their payload. A Maybe object is either a Just object or the unique object Nothing (which has no payload); an Either object is either a Right object or a Left object. Maybe represents the concept of optional values; Either represents the concept of values which are either correct (Right) or errors (Left). Note that the term...| Scheme Requests for Implementation
SRFI 191 is now in withdrawn status.Many Scheme systems provide mechanisms for inspecting the arity of a procedural value, making it a common feature, however there is no standard interface. As a result there is no portable way to observe the arity of a procedure without actually applying it. This SRFI proposes a simple interface that is consistent with existing Scheme systems' facilities and prior proposals.| Scheme Requests for Implementation
SRFI 180 is now in final status.This library describes a JavaScript Object Notation (JSON) parser and printer. It supports JSON that may be bigger than memory.| Scheme Requests for Implementation
SRFI 179 is now in final status.This SRFI specifies an array mechanism for Scheme. Arrays as defined here are quite general; at their most basic, an array is simply a mapping, or function, from multi-indices of exact integers $i_0,\ldots,i_{d-1}$ to Scheme values. The set of multi-indices $i_0,\ldots,i_{d-1}$ that are valid for a given array form the domain of the array. In this SRFI, each array's domain consists of the cross product of nonempty intervals of exact integers $[l_0,u_0)\times[l_...| Scheme Requests for Implementation
SRFI 190 is now in final status.This SRFI defines syntax to create SRFI 121/158 coroutine generators conveniently and in the flavor of Python generator functions.| Scheme Requests for Implementation
SRFI 188 is now in final status.Splicing binding constructs for syntactic keywords are versions of let-syntax and letrec-syntax that can be used in a definition context in the same way as begin.| Scheme Requests for Implementation
SRFI 185 is now in final status. Scheme specifies mutable fixed-length strings. SRFI 118 adds two procedures, string-append! and string-replace!, which allow the length of the string to change. This SRFI provides two linear-update versions of these procedures: that is, the implementation may change the string length or return a new string instead. In addition, two convenience macros are provided that make the procedures somewhat easier to use.| Scheme Requests for Implementation
SRFI 182 is now in withdrawn status.Unlike the VALUES and CALL-WITH-VALUES mechanism of R5RS, this one uses an explicit representation for multiple return values as a single value, namely a procedure. Decomposition of multiple values is done by simple application. The macro, ADBMAL, evaluates to a procedure that takes one procedure argument. The ADBMAL macro can be compared with LAMBDA. While a LAMBDA expression that consists of <formals> and <body> requires some actual arguments later when t...| Scheme Requests for Implementation
SRFI 183 is now in withdrawn status.This SRFI introduces the formatting procedure Fox ("format of X"), which takes one required argument and a variable number of additional arguments and returns a formatted string.| Scheme Requests for Implementation