-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathsrfi.rss
2604 lines (2564 loc) · 269 KB
/
srfi.rss
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Scheme Requests for Implementation</title><link>https://srfi.schemers.org/</link><description>Updates to SRFI documents</description><language>en-US</language><webMaster>[email protected] (Arthur A. Gleckler)</webMaster><atom:link href="https://srfi.schemers.org/srfi.rss" rel="self" type="application/rss+xml"></atom:link><item><title>SRFI 256: Minimal extension to SRFI 9/R7RS small record type definitions for inheritance</title><link>https://srfi.schemers.org/srfi-256/</link><guid>https://srfi.schemers.org/srfi-256</guid><description>SRFI 256 is now in <em>withdrawn</em> status.<blockquote><p>A SRFI 9-style <code>define-record-type</code> 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.</p></blockquote></description><dc:creator>Daphne Preston-Kendal</dc:creator><pubDate>Sat, 08 Feb 2025 12:00:00 -0800</pubDate></item><item><title>SRFI 260: Generated Symbols</title><link>https://srfi.schemers.org/srfi-260/</link><guid>https://srfi.schemers.org/srfi-260</guid><description>SRFI 260 is now in <em>draft</em> status.<blockquote><p>This SRFI defines the procedure <code>generate-symbol</code>. 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.</p></blockquote></description><dc:creator>Marc Nieper-Wißkirchen</dc:creator><pubDate>Mon, 27 Jan 2025 12:00:00 -0800</pubDate></item><item><title>SRFI 259: Tagged procedures with type safety</title><link>https://srfi.schemers.org/srfi-259/</link><guid>https://srfi.schemers.org/srfi-259</guid><description>SRFI 259 is now in <em>draft</em> status.<blockquote><p>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.</p></blockquote></description><dc:creator>Daphne Preston-Kendal</dc:creator><pubDate>Sun, 26 Jan 2025 12:00:00 -0800</pubDate></item><item><title>SRFI 248: Minimal delimited continuations</title><link>https://srfi.schemers.org/srfi-248/</link><guid>https://srfi.schemers.org/srfi-248</guid><description>SRFI 248 is now in <em>final</em> status.<blockquote> <p>
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 <code>shift0</code>/<code>reset0</code> delimited control
operators. It is well known that other delimited control
operators like <code>prompt0</code>/<code>control0</code> or
<code>reset</code>/<code>shift</code> are expressible
in <code>shift0</code>/<code>reset0</code> (and vice versa).
</p></blockquote></description><dc:creator>Marc Nieper-Wißkirchen</dc:creator><pubDate>Fri, 24 Jan 2025 12:00:00 -0800</pubDate></item><item><title>SRFI 258: Uninterned symbols</title><link>https://srfi.schemers.org/srfi-258/</link><guid>https://srfi.schemers.org/srfi-258</guid><description>SRFI 258 is now in <em>draft</em> status.<blockquote> <p>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.</p></blockquote></description><dc:creator>Wolfgang Corcoran-Mathe</dc:creator><pubDate>Thu, 23 Jan 2025 12:00:00 -0800</pubDate></item><item><title>SRFI 257: Simple extendable pattern matcher with backtracking</title><link>https://srfi.schemers.org/srfi-257/</link><guid>https://srfi.schemers.org/srfi-257</guid><description>SRFI 257 is now in <em>draft</em> status.<blockquote><p>
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, <code>match</code>, which provides all
common-denominator functionality described in <a href="https://srfi.schemers.org/srfi-200/">SRFI-200</a>,
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
<code>define-match-pattern</code> mechanism.
</p></blockquote></description><dc:creator>Sergei Egorov</dc:creator><pubDate>Sun, 29 Dec 2024 12:00:00 -0800</pubDate></item><item><title>SRFI 255: Restarting conditions</title><link>https://srfi.schemers.org/srfi-255/</link><guid>https://srfi.schemers.org/srfi-255</guid><description>SRFI 255 is now in <em>final</em> status.<blockquote><p>When an exceptional situation is encountered by a program, it
usually creates a condition object describing the situation, and then
passes control to an exception 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 extra input. Often, the choice of method of
recovery is left up to a human user, who may be prompted for
the input needed to recover. This SRFI proposes a mechanism
called <dfn>restarters</dfn>, which uses a new type of condition object
and an associated exception handler to encapsulate the information
necessary to restart a computation. We also
describe the behavior and interface of <dfn>interactor</dfn> procedures,
which implement interactive restarts.</p></blockquote></description><dc:creator>Wolfgang Corcoran-Mathe</dc:creator><pubDate>Sun, 22 Dec 2024 12:00:00 -0800</pubDate></item><item><title>SRFI 253: Data (Type-)Checking</title><link>https://srfi.schemers.org/srfi-253/</link><guid>https://srfi.schemers.org/srfi-253</guid><description>SRFI 253 is now in <em>final</em> status.<blockquote><p>
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 un-checked code.
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 (<code>check-arg</code>)
and return value(s) (<code>values-checked</code>) checking/coercion are provided.
Syntax sugar like <code>define-checked</code>
and <code>define-record-type-checked</code> is added on top.
</p></blockquote></description><dc:creator>Artyom Bologov</dc:creator><pubDate>Fri, 15 Nov 2024 12:00:00 -0800</pubDate></item><item><title>SRFI 234: Topological Sorting</title><link>https://srfi.schemers.org/srfi-234/</link><guid>https://srfi.schemers.org/srfi-234</guid><description>SRFI 234 is now in <em>final</em> status.<blockquote><p>
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. The
procedure <code>topological-sort</code> returns three values. If
sorting succeeds, the first value contains the result and the second
and third are <code>#false</code>. If sorting fails, the result
is <code>#false</code> and the second and third value may provide
additional information about the error.
</p></blockquote></description><dc:creator>John Cowan and Arne Babenhauserheide</dc:creator><pubDate>Tue, 24 Sep 2024 12:00:00 -0800</pubDate></item><item><title>SRFI 249: Restarting conditions</title><link>https://srfi.schemers.org/srfi-249/</link><guid>https://srfi.schemers.org/srfi-249</guid><description>SRFI 249 is now in <em>withdrawn</em> status.<blockquote><p>When an exceptional situation is encountered by a program, it may
create a <em>condition</em> 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 extra input. Often, the decision of which method of
recovery to choose is left up to a human user, who may be prompted for
the input needed to recover. This SRFI proposes a simple mechanism
called <em>restarters</em> to encapsulate the information necessary to
restart a computation with associated interactive prompters.</p></blockquote></description><dc:creator>John Cowan</dc:creator><pubDate>Fri, 13 Sep 2024 12:00:00 -0800</pubDate></item><item><title>SRFI 246: Guardians</title><link>https://srfi.schemers.org/srfi-246/</link><guid>https://srfi.schemers.org/srfi-246</guid><description>SRFI 246 is now in <em>withdrawn</em> status.<blockquote><p>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 deallocation indefinitely so that they can be reused or so that clean-up or other actions can be performed using the data stored within the objects. Guardians avoid the problems associated with classical finalizers detailed in the Rationale section.</p></blockquote></description><dc:creator>John Cowan</dc:creator><pubDate>Wed, 11 Sep 2024 12:00:00 -0800</pubDate></item><item><title>SRFI 254: Ephemerons and Guardians</title><link>https://srfi.schemers.org/srfi-254/</link><guid>https://srfi.schemers.org/srfi-254</guid><description>SRFI 254 is now in <em>draft</em> status.<blockquote><p>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 deallocation indefinitely so that they can be reused or so that clean-up or other actions can be performed using the data stored within the objects. Guardians avoid the problems associated with classical finalizers detailed in the Rationale section.</p></blockquote></description><dc:creator>Marc Nieper-Wißkirchen</dc:creator><pubDate>Wed, 11 Sep 2024 12:00:00 -0800</pubDate></item><item><title>SRFI 251: Mixing groups of definitions with expressions within bodies</title><link>https://srfi.schemers.org/srfi-251/</link><guid>https://srfi.schemers.org/srfi-251</guid><description>SRFI 251 is now in <em>final</em> status.<blockquote><p>
Scheme has traditionally required procedure bodies and the bodies of derived constructs
such as <code>let</code> 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 intuitive rule that to find the definition of a lexical variable, one has
to look <em>up</em> the source code tree.
</p></blockquote></description><dc:creator>Sergei Egorov</dc:creator><pubDate>Mon, 06 May 2024 12:00:00 -0800</pubDate></item><item><title>SRFI 252: Property Testing</title><link>https://srfi.schemers.org/srfi-252/</link><guid>https://srfi.schemers.org/srfi-252</guid><description>SRFI 252 is now in <em>final</em> status.<blockquote><p>This defines an extension of the
<a href="https://srfi.schemers.org/srfi-64/srfi-64.html">SRFI 64</a>
test suite API to support property testing. It uses
<a href="https://srfi.schemers.org/srfi-158/srfi-158.html">SRFI 158</a>
generators to generate test inputs, which allows for the creation of custom
input generators. It uses
<a href="https://srfi.schemers.org/srfi-194/srfi-194.html">SRFI 194</a>
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 tests is similar to that of
<a href="https://srfi.schemers.org/srfi-64/srfi-64.html">SRFI 64</a>,
and a property-testing-specific test runner is specified in order to display
the results of the propertized tests.</p></blockquote></description><dc:creator>Antero Mejr</dc:creator><pubDate>Thu, 25 Apr 2024 12:00:00 -0800</pubDate></item><item><title>SRFI 245: Mixing definitions and expressions within bodies</title><link>https://srfi.schemers.org/srfi-245/</link><guid>https://srfi.schemers.org/srfi-245</guid><description>SRFI 245 is now in <em>withdrawn</em> status.<blockquote><p>Scheme has traditionally required procedure bodies and the bodies of derived constructs such as <code>let</code> 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.</p></blockquote></description><dc:creator>Daphne Preston-Kendal</dc:creator><pubDate>Thu, 04 Apr 2024 12:00:00 -0800</pubDate></item><item><title>SRFI 247: Syntactic Monads</title><link>https://srfi.schemers.org/srfi-247/</link><guid>https://srfi.schemers.org/srfi-247</guid><description>SRFI 247 is now in <em>final</em> status.<blockquote> <p>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.</p></blockquote></description><dc:creator>Marc Nieper-Wißkirchen</dc:creator><pubDate>Sun, 24 Dec 2023 12:00:00 -0800</pubDate></item><item><title>SRFI 243: Unreadable Data</title><link>https://srfi.schemers.org/srfi-243/</link><guid>https://srfi.schemers.org/srfi-243</guid><description>SRFI 243 is now in <em>withdrawn</em> status.<blockquote><p>This SRFI suggests how the Scheme reader and writer should
handle unreadable data in general, and unreadable objects in
particular.</p></blockquote></description><dc:creator>Lassi Kortela</dc:creator><pubDate>Thu, 30 Nov 2023 12:00:00 -0800</pubDate></item><item><title>SRFI 250: Insertion-ordered hash tables</title><link>https://srfi.schemers.org/srfi-250/</link><guid>https://srfi.schemers.org/srfi-250</guid><description>SRFI 250 is now in <em>draft</em> status.<blockquote><p>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:</p>
<ul>
<li>Is disjoint from all other types.</li>
<li>Provides a mapping from objects known as <em>keys</em>
to corresponding objects known as <em>values</em>.
<ul>
<li>Keys may be any Scheme objects in some kinds of hash tables,
but are restricted in other kinds.</li>
<li>Values may be any Scheme objects.</li></ul></li>
<li>Provides an <em>equality predicate</em> which defines
when a proposed key is the same as an existing key. No table
may contain more than one value for a given key.</li>
<li>Provides a <em>hash function</em> which maps a candidate
key into a non-negative exact integer.</li>
<li>Supports mutation as the primary means of setting the
contents of a table.</li>
<li>Provides key lookup and destructive update in (expected)
amortized constant time, provided that a satisfactory hash
function is available.</li>
<li>Does not guarantee that whole-table operations work in
the presence of concurrent mutation of the whole hash table.
(Values may be safely mutated.)</li>
</ul>
<p>
Unlike the hash tables of <a href="https://srfi.schemers.org/srfi-125/">SRFI 125</a>,
which is the direct ancestor of this specification, the hash tables described
here are ordered by insertion: that is, associations inserted earlier in
the history of the hash table appear earlier in the ordering. Advances
in the implementations of hash tables, as provided by C++, Python,
JavaScript, etc., make the provision of this new facility practical.
As a result, the hash tables of this SRFI do not interoperate with the
hash tables of SRFI 125, <a href="https://srfi.schemers.org/srfi-126/">SRFI 126</a>,
or existing R6RS implementations.</p></blockquote></description><dc:creator>John Cowan</dc:creator><pubDate>Tue, 14 Nov 2023 12:00:00 -0800</pubDate></item><item><title>SRFI 242: The CFG Language</title><link>https://srfi.schemers.org/srfi-242/</link><guid>https://srfi.schemers.org/srfi-242</guid><description>SRFI 242 is now in <em>final</em> status.<blockquote> <p>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.</p></blockquote></description><dc:creator>Marc Nieper-Wißkirchen</dc:creator><pubDate>Sun, 29 Oct 2023 12:00:00 -0800</pubDate></item><item><title>SRFI 154: First-class dynamic extents</title><link>https://srfi.schemers.org/srfi-154/</link><guid>https://srfi.schemers.org/srfi-154</guid><description>SRFI 154 is now in <em>withdrawn</em> status.<blockquote><p>Scheme has the notion of the <em>dynamic extent</em> of a
procedure call. A number of standard Scheme procedures and
syntaxes
like <code>dynamic-wind</code>, <code>call-with-current-continuation</code>,
and <code>parameterize</code>
deal with the dynamic extent indirectly. The same holds true
for the procedures and syntaxes dealing with continuation
marks as defined by <a href="https://srfi.schemers.org/srfi-157/srfi-157.html">SRFI
157</a>.</p>
<p>This SRFI reifies the dynamic extent into a first-class value
together with a well-defined procedural interface and a syntax to
create procedures that remember not only their environment at
creation time but also their dynamic extent, which includes their
dynamic environment.</p></blockquote></description><dc:creator>Marc Nieper-Wißkirchen</dc:creator><pubDate>Thu, 29 Jun 2023 12:00:00 -0800</pubDate></item><item><title>SRFI 155: Promises</title><link>https://srfi.schemers.org/srfi-155/</link><guid>https://srfi.schemers.org/srfi-155</guid><description>SRFI 155 is now in <em>withdrawn</em> status.<blockquote> <p>
Scheme, like ML, is a programming language with strict evaluation
while others, like Haskell, use lazy evaluation. Scheme, however,
possesses the primitives <code>delay</code> and <code>force</code>
that make it possible to express lazy algorithms.
</p><p>
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 R7RS as long as no
dynamically bound variables, also known as parameter objects, are
present. It is the purpose of this SRFI to rework the specification
in the R7RS so that lazy evaluation works with purely functional code
that makes use of dynamic environments or, more generally, the dynamic
extent. This is done by remembering the dynamic extent in effect when
the <code>delay</code> expression is evaluated.
</p><p>
Another perceived misfeature of the R7RS model of delayed evaluation
is the apparent need of the <code>delay-force</code> special form to
express iterative lazy algorithms. It is shown that
the <code>delay-force</code> special form is unneeded and that the
implementation can (and should) handle iterative lazy algorithms
without space leaks.</p></blockquote></description><dc:creator>Marc Nieper-Wißkirchen</dc:creator><pubDate>Thu, 29 Jun 2023 12:00:00 -0800</pubDate></item><item><title>SRFI 157: Continuation marks</title><link>https://srfi.schemers.org/srfi-157/</link><guid>https://srfi.schemers.org/srfi-157</guid><description>SRFI 157 is now in <em>withdrawn</em> status.<blockquote><p>
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 <code>eq?</code>.
At most one mark for a given key can be attached to a single frame.
</p>
<p>
Besides stack inspection, continuation marks can be used to
implement dynamic scope, delimited continuations, or delayed
evaluation that is able to handle iterative lazy algorithms.
</p>
<p>
This SRFI proposes to add continuation marks to the Scheme
programming language. The interface defined here is modelled after
Racket's continuation marks. It does not include all forms and
procedures provided by Racket but provides a compatible subset.
</p></blockquote></description><dc:creator>Marc Nieper-Wißkirchen</dc:creator><pubDate>Thu, 29 Jun 2023 12:00:00 -0800</pubDate></item><item><title>SRFI 237: R6RS Records (refined)</title><link>https://srfi.schemers.org/srfi-237/</link><guid>https://srfi.schemers.org/srfi-237</guid><description>SRFI 237 is now in <em>final</em> status.<blockquote> <p>The record mechanism of R<sup>6</sup>RS 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.</p></blockquote></description><dc:creator>Marc Nieper-Wißkirchen</dc:creator><pubDate>Tue, 02 May 2023 12:00:00 -0800</pubDate></item><item><title>SRFI 240: Reconciled Records</title><link>https://srfi.schemers.org/srfi-240/</link><guid>https://srfi.schemers.org/srfi-240</guid><description>SRFI 240 is now in <em>final</em> status.<blockquote> <p>This SRFI defines a version of
the <code>define-record-type</code> definition
of <code>R<sup>6</sup>RS</code>
and <a href="https://srfi.schemers.org/srfi-237/">SRFI
237</a> that extends the <code>define-record-type</code> syntax
of <code>R<sup>7</sup>RS</code>, reconciling both systems.</p>
<p>This SRFI is meant to be adopted by R<sup>7</sup>RS-large to
integrate essentially the R<sup>6</sup>RS record system
compatibly with the existing R<sup>7</sup>RS-small record
system.</p></blockquote></description><dc:creator>Marc Nieper-Wißkirchen</dc:creator><pubDate>Tue, 02 May 2023 12:00:00 -0800</pubDate></item><item><title>SRFI 153: Ordered Sets</title><link>https://srfi.schemers.org/srfi-153/</link><guid>https://srfi.schemers.org/srfi-153</guid><description>SRFI 153 is now in <em>final</em> status.<blockquote><p><em>Osets</em> 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 <em>equality predicate</em>. The elements in an oset appear in a fixed order determined by the comparator used to create it.</p></blockquote></description><dc:creator>John Cowan</dc:creator><pubDate>Mon, 01 May 2023 12:00:00 -0800</pubDate></item><item><title>SRFI 226: Control Features</title><link>https://srfi.schemers.org/srfi-226/</link><guid>https://srfi.schemers.org/srfi-226</guid><description>SRFI 226 is now in <em>final</em> status.<blockquote> <p>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 <code>call/cc</code>) that captures the current
continuation as a procedure, which, when called, aborts the then-current
continuation and reinstates the captured one.</p>
<p>One can visualize a continuation as a list of (continuation) frames
where a non-tail call adds a frame to the top of the list and where the return
from a non-tail call removes the appropriate frame.</p>
<p>Moreover, each expression is evaluated in a dynamic environment that
conceptually holds the values of parameters like the current output port
and the dynamic-wind stack at the point of evaluation. As the dynamic
environment is captured and reinstated along the continuation when the
<code>call/cc</code> machinery is used, we can view it conceptually as
part of the continuation.</p>
<p>The libraries defined in this SRFI are all concerned with continuations
in a wider sense. More specifically, the topics are as follows:</p>
<dl>
<dt>Continuation Prompts</dt><dd> A continuation prompt is a special
continuation frame that is tagged with a so-called prompt tag. Procedures
to install continuation prompts and to abort the current continuation and
escape back to a previously installed continuation prompt are
provided. Moreover, continuation prompts are equipped with handlers that
are invoked when a continuation is aborted to them.</dd>
<dt>Continuations</dt><dd> When continuations are captured, the list of
captured continuation frames is always delimited by some continuation
prompt. This extends the semantics of Scheme’s
<code>call-with-current-continuation</code>. Moreover, a
procedure to capture so-called composable continuations is
provided. As opposed to continuations captured
by <code>call-with-current-continuation</code>, invoking a
composable continuation does not abort the then-current
continuation, so composable continuations behave like ordinary
procedures. Together with continuation prompts, composable
continuations allow one to implement the various proposed sets of
control operators for delimited continuations. Finally, a
primitive (<code>call-in-continuation</code>) is provided that
allows calling a procedure in a given continuation instead of just
delivering values to it.</dd>
<dt>Continuation Marks</dt><dd> Continuation marks are a provided feature
that allows one to attach arbitrary information to continuation frames
that is captured and reinstated along with the rest of the
continuation. Conceptually, exception handlers and parameters are
implemented in terms of continuation marks, but the syntax and procedures
defined in this SRFI allow the user to use them in more general
ways. Moreover, they reify the notion of a tail call, allowing one, for
example, to test for tail context.</dd>
<dt>Exceptions</dt><dd> The exception mechanism
of <a href="#sperber"><cite>R6RS</cite></a>
and <a href="#shinn"><cite>R7RS</cite></a> is reinterpreted with
respect to the concepts introduced in this SRFI. (Here, and in what follows
we mean the so-called small language when we speak about <cite>R7RS</cite>.)
Moreover, the
<code>with-exception-handler</code> procedure and the <code>guard</code>
syntax gain additional tail-context guarantees.</dd>
<dt>Parameters</dt><dd> The parameter object mechanism
of <a href="#feeley2"><cite>SRFI 39</cite></a>
and <cite>R7RS</cite> is reinterpreted with respect to the
concepts introduced in this SRFI. Procedures to retrieve the
current parameterization and to reinstall it later are
provided. Moreover, the <code>parameterize</code> syntax gains an
additional tail-context guarantee. To support an alternative
model of parameters that is linked to the dynamic extent and not
to the current parameterization, the notion of a parameter-like
object and the <code>temporarily</code> syntax are introduced.</dd>
<dt>Fluids</dt><dd> Fluids are a syntactic reinterpretation of parameter
objects.</dd>
<dt>Delayed evaluation</dt><dd> The syntax and procedures on delayed
evaluation of <cite>R7RS</cite> are revisited and redefined to handle the
following satisfactorily: the parameterization of the delayed expression
being forced, the treatment of exceptions raised during forcing of
delayed expressions, and iterative lazy algorithms. Moreover, their
semantics are detailed with respect to the concepts introduced in this
SRFI, and promises can naturally deliver an arbitrary number of values
when being forced. Finally, the initial continuation of a delayed
expression being forced is defined in a way that makes it interchangeable
with the initial continuation of a thread.</dd>
<dt>Threads</dt><dd> The thread mechanism
of <a href="#feeley1"><cite>SRFI 18</cite></a> is detailed with
respect to the concepts introduced in this SRFI. In particular,
mutation of parameter objects in multi-threaded applications is
specified. In order to support timeout arguments in a type-safe
way, a minimal API on time objects is included as well.</dd></dl>
<p>Large parts of this SRFI have been inspired by the control operators
provided by <a href="#racket"><cite>Racket</cite></a>.</p></blockquote></description><dc:creator>Marc Nieper-Wißkirchen</dc:creator><pubDate>Tue, 25 Apr 2023 12:00:00 -0800</pubDate></item><item><title>SRFI 241: Match — Simple Pattern-Matching Syntax to Express Catamorphisms on Scheme Data</title><link>https://srfi.schemers.org/srfi-241/</link><guid>https://srfi.schemers.org/srfi-241</guid><description>SRFI 241 is now in <em>final</em> status.<blockquote> <p>
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.
</p></blockquote></description><dc:creator>Marc Nieper-Wißkirchen</dc:creator><pubDate>Thu, 23 Mar 2023 12:00:00 -0800</pubDate></item><item><title>SRFI 235: Combinators</title><link>https://srfi.schemers.org/srfi-235/</link><guid>https://srfi.schemers.org/srfi-235</guid><description>SRFI 235 is now in <em>final</em> status.<blockquote><p>This SRFI contains various procedures that accept and return procedures,
as well as a few others, drawn from
<a href="https://wiki.call-cc.org/eggref/4/combinators">an earlier version of Chicken</a>.
Common Lisp has a few of them too, and more come from
<a href="https://programmingpraxis.com/contents/standard-prelude/">the Standard Prelude from <em>Programming Praxis</em></a>.
Using these procedures helps to keep code terse
and reduce the need for ad hoc lambdas.</p></blockquote></description><dc:creator>John Cowan (spec) and Arvydas Silanskas (implementation)</dc:creator><pubDate>Tue, 28 Feb 2023 12:00:00 -0800</pubDate></item><item><title>SRFI 244: Multiple-value Definitions</title><link>https://srfi.schemers.org/srfi-244/</link><guid>https://srfi.schemers.org/srfi-244</guid><description>SRFI 244 is now in <em>final</em> status.<blockquote><p>A <code>define-values</code> form is a definition that binds
multiple variables from a single expression returning multiple
values.</p></blockquote></description><dc:creator>Marc Nieper-Wißkirchen</dc:creator><pubDate>Sun, 05 Feb 2023 12:00:00 -0800</pubDate></item><item><title>SRFI 239: Destructuring Lists</title><link>https://srfi.schemers.org/srfi-239/</link><guid>https://srfi.schemers.org/srfi-239</guid><description>SRFI 239 is now in <em>final</em> status.<blockquote> <p>This SRFI provides the <code>list-case</code>, the
syntactic fundamental list destructor.</p></blockquote></description><dc:creator>Marc Nieper-Wißkirchen</dc:creator><pubDate>Mon, 23 Jan 2023 12:00:00 -0800</pubDate></item><item><title>SRFI 238: Codesets</title><link>https://srfi.schemers.org/srfi-238/</link><guid>https://srfi.schemers.org/srfi-238</guid><description>SRFI 238 is now in <em>final</em> status.<blockquote> <p>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 <em>errno</em> and
<em>signal</em> codesets.</p></blockquote></description><dc:creator>Lassi Kortela</dc:creator><pubDate>Mon, 16 Jan 2023 12:00:00 -0800</pubDate></item><item><title>SRFI 228: Composing Comparators</title><link>https://srfi.schemers.org/srfi-228/</link><guid>https://srfi.schemers.org/srfi-228</guid><description>SRFI 228 is now in <em>final</em> status.<blockquote><p>Further procedures for defining <a href="https://srfi.schemers.org/srfi-128/">SRFI 128</a> comparators.
</p><p>Best enjoyed in combination with <a href="https://srfi.schemers.org/srfi-162/">SRFI 162</a>.</p></blockquote></description><dc:creator>Daphne Preston-Kendal</dc:creator><pubDate>Sat, 10 Dec 2022 12:00:00 -0800</pubDate></item><item><title>SRFI 236: Evaluating expressions in an unspecified order</title><link>https://srfi.schemers.org/srfi-236/</link><guid>https://srfi.schemers.org/srfi-236</guid><description>SRFI 236 is now in <em>final</em> status.<blockquote><p>This SRFI defines the <code>independently</code> syntax, which can be
used to combine side effects into one expression without
specifying their relative order.</p></blockquote></description><dc:creator>Marc Nieper-Wißkirchen</dc:creator><pubDate>Tue, 22 Nov 2022 12:00:00 -0800</pubDate></item><item><title>SRFI 233: INI files</title><link>https://srfi.schemers.org/srfi-233/</link><guid>https://srfi.schemers.org/srfi-233</guid><description>SRFI 233 is now in <em>final</em> status.<blockquote><p>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
<code>INI</code>, 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.
</p></blockquote></description><dc:creator>John Cowan (spec) and Arvydas Silanskas (implementation)</dc:creator><pubDate>Thu, 13 Oct 2022 12:00:00 -0800</pubDate></item><item><title>SRFI 225: Dictionaries</title><link>https://srfi.schemers.org/srfi-225/</link><guid>https://srfi.schemers.org/srfi-225</guid><description>SRFI 225 is now in <em>final</em> status.<blockquote><p>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 <em>dictionary</em> or <em>dict</em> in this SRFI.</p></blockquote></description><dc:creator>John Cowan (spec) and Arvydas Silanskas (implementation)</dc:creator><pubDate>Tue, 27 Sep 2022 12:00:00 -0800</pubDate></item><item><title>SRFI 122: Nonempty Intervals and Generalized Arrays</title><link>https://srfi.schemers.org/srfi-122/</link><guid>https://srfi.schemers.org/srfi-122</guid><description>SRFI 122 is now in <em>withdrawn</em> status.<blockquote> <p>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
<i>domain</i> 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},u_{d-1})$, a subset
of $\mathbb Z^d$, $d$-tuples of integers. Thus, we introduce a data type
called <i>intervals</i>, which encapsulate the cross product of nonempty
intervals of exact integers. Specialized variants of arrays are specified
to provide portable programs with efficient representations for common
use cases.</p></blockquote></description><dc:creator>Bradley J. Lucier</dc:creator><pubDate>Sun, 25 Sep 2022 12:00:00 -0800</pubDate></item><item><title>SRFI 231: Intervals and Generalized Arrays</title><link>https://srfi.schemers.org/srfi-231/</link><guid>https://srfi.schemers.org/srfi-231</guid><description>SRFI 231 is now in <em>final</em> status.<blockquote> <p>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 <i>domain</i> 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)\times\cdots\times[l_{d-1},u_{d-1})$ of $\mathbb Z^d$, $d$-tuples of integers. Thus, we introduce a data type called $d$-<i>intervals</i>, or more briefly <a href="https://en.wikipedia.org/w/index.php?title=Interval_(mathematics)&amp;oldid=1091935326"><i>intervals</i></a>, that encapsulates this notion. (We borrow this terminology from, e.g., Elias Zakon's <a href="http://www.trillia.com/zakon1.html">Basic Concepts of Mathematics</a>.) Specialized variants of arrays provide portable programs with efficient representations for common use cases.</p>
<p>This is a revised and improved version of <a href="https://srfi.schemers.org/srfi-179/">SRFI 179</a>.</p></blockquote></description><dc:creator>Bradley J. Lucier</dc:creator><pubDate>Sun, 25 Sep 2022 12:00:00 -0800</pubDate></item><item><title>SRFI 200: Pattern Matching</title><link>https://srfi.schemers.org/srfi-200/</link><guid>https://srfi.schemers.org/srfi-200</guid><description>SRFI 200 is now in <em>withdrawn</em> status.<blockquote><p>This SRFI discusses some of the existing pattern-matching
libraries for the Scheme programming language &amp;mdash; 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 <code>racket/match</code> module
distributed with the Racket programming environment, as well
as the Bigloo and Gerbil pattern matchers distributed with
their respective implementations.
It then extracts a pattern syntax which is compatible with three of
those implementations and provides extrinsic rationale for that
syntax.
It also provides a simple implementation of a pattern matcher
which conforms to the specification of a pattern language provided
in this document.</p></blockquote></description><dc:creator>Panicz Maciej Godek</dc:creator><pubDate>Sat, 23 Jul 2022 12:00:00 -0800</pubDate></item><item><title>SRFI 211: Scheme Macro Libraries</title><link>https://srfi.schemers.org/srfi-211/</link><guid>https://srfi.schemers.org/srfi-211</guid><description>SRFI 211 is now in <em>final</em> status.<blockquote><p>This SRFI describes common syntactic extensions of the <code>syntax-rules</code> 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 <code>cond-expand</code> forms.
</p></blockquote></description><dc:creator>Marc Nieper-Wißkirchen</dc:creator><pubDate>Tue, 19 Jul 2022 12:00:00 -0800</pubDate></item><item><title>SRFI 232: Flexible curried procedures</title><link>https://srfi.schemers.org/srfi-232/</link><guid>https://srfi.schemers.org/srfi-232</guid><description>SRFI 232 is now in <em>final</em> status.<blockquote><p>Scheme lacks a flexible way to create and apply curried procedures.
This SRFI describes <code>curried</code>, a variant of
<code>lambda</code> 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. <code>curried</code> also supports
nullary and variadic procedures, and procedures created with it have
predictable behavior when applied to surplus arguments.</p></blockquote></description><dc:creator>Wolfgang Corcoran-Mathe</dc:creator><pubDate>Wed, 06 Apr 2022 12:00:00 -0800</pubDate></item><item><title>SRFI 205: POSIX Terminal Fundamentals</title><link>https://srfi.schemers.org/srfi-205/</link><guid>https://srfi.schemers.org/srfi-205</guid><description>SRFI 205 is now in <em>withdrawn</em> status.<blockquote><p>
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.
</p>
<p>
It is intended to provide all the
<a href="https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/termios.h.html">termios structure</a>
functionality a modern Scheme programmer might desire by supplying a
<a href="https://pubs.opengroup.org/onlinepubs/9699919799/utilities/stty.html">stty</a>
procedure, and simple abstractions on top of it.
</p>
</blockquote></description><dc:creator>John Cowan and Harold Ancell</dc:creator><pubDate>Mon, 21 Mar 2022 12:00:00 -0800</pubDate></item><item><title>SRFI 204: Wright-Cartwright-Shinn Pattern Matcher</title><link>https://srfi.schemers.org/srfi-204/</link><guid>https://srfi.schemers.org/srfi-204</guid><description>SRFI 204 is now in <em>withdrawn</em> status.<blockquote><p>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.</p></blockquote></description><dc:creator>Felix Thibault</dc:creator><pubDate>Wed, 02 Feb 2022 12:00:00 -0800</pubDate></item><item><title>SRFI 227: Optional Arguments</title><link>https://srfi.schemers.org/srfi-227/</link><guid>https://srfi.schemers.org/srfi-227</guid><description>SRFI 227 is now in <em>final</em> status.<blockquote> <p>This SRFI specifies the <code>opt-lambda</code> syntax, which
generalizes <code>lambda</code>. An <code>opt-lambda</code> 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.</p>
<p>This SRFI also specifies a variation <code>opt*-lambda</code>, which is
to <code>opt-lambda</code> as <code>let*</code> is to <code>let</code>
and the related binding constructs <code>let-optionals</code>
and <code>let-optionals*</code>.</p>
<p>Finally, for those who prefer less explicit procedure
definitions, a sublibrary provides <code>define-optionals</code>
and <code>define-optionals*</code>.</p></blockquote></description><dc:creator>Marc Nieper-Wißkirchen (spec and R6RS implementation) and Daphne Preston-Kendal (R7RS implementation)</dc:creator><pubDate>Tue, 16 Nov 2021 12:00:00 -0800</pubDate></item><item><title>SRFI 229: Tagged Procedures</title><link>https://srfi.schemers.org/srfi-229/</link><guid>https://srfi.schemers.org/srfi-229</guid><description>SRFI 229 is now in <em>final</em> status.<blockquote> <p>This SRFI defines <dfn>tagged procedures</dfn>, which are procedures
that are tagged with a Scheme value when created through the
syntax <code>lambda/tag</code> and <code>case-lambda/tag</code>. The
value of the tag of a procedure can be retrieved
with <code>procedure-tag</code>, and the
predicate <code>procedure/tag?</code> discerns whether a procedure is
tagged.</p></blockquote></description><dc:creator>Marc Nieper-Wißkirchen</dc:creator><pubDate>Mon, 15 Nov 2021 12:00:00 -0800</pubDate></item><item><title>SRFI 230: Atomic Operations</title><link>https://srfi.schemers.org/srfi-230/</link><guid>https://srfi.schemers.org/srfi-230</guid><description>SRFI 230 is now in <em>final</em> status.<blockquote> <p>This SRFI defines atomic operations for the Scheme programming language.
An <dfn>atomic operation</dfn> 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, <dfn>atomic flags</dfn>
and <dfn>atomic (fixnum) boxes</dfn>, whose contents can be queried and
mutated atomically. Moreover, each atomic operation comes with
a <dfn>memory order</dfn> that defines the level of synchronization with
other threads.</p></blockquote></description><dc:creator>Marc Nieper-Wißkirchen</dc:creator><pubDate>Mon, 15 Nov 2021 12:00:00 -0800</pubDate></item><item><title>SRFI 223: Generalized binary search procedures</title><link>https://srfi.schemers.org/srfi-223/</link><guid>https://srfi.schemers.org/srfi-223</guid><description>SRFI 223 is now in <em>final</em> status.<blockquote><p>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.</p></blockquote></description><dc:creator>Daphne Preston-Kendal</dc:creator><pubDate>Tue, 27 Jul 2021 12:00:00 -0800</pubDate></item><item><title>SRFI 222: Compound Objects</title><link>https://srfi.schemers.org/srfi-222/</link><guid>https://srfi.schemers.org/srfi-222</guid><description>SRFI 222 is now in <em>final</em> status.<blockquote><p>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
<i>simple</i> conditions, which are just records.</p></blockquote></description><dc:creator>John Cowan (text) and Arvydas Silanskas (implementation)</dc:creator><pubDate>Tue, 20 Jul 2021 12:00:00 -0800</pubDate></item><item><title>SRFI 224: Integer Mappings</title><link>https://srfi.schemers.org/srfi-224/</link><guid>https://srfi.schemers.org/srfi-224</guid><description>SRFI 224 is now in <em>final</em> status.<blockquote><p>Integer maps, or <em>fxmappings</em>, 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
<a href="https://srfi.schemers.org/srfi-146/">SRFI
146</a>, 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
no intrinsic order, but may be treated as ordered sets, using the
natural ordering on keys; a substantial sublibrary for working with
fxmappings in this fashion is included.</p></blockquote></description><dc:creator>Wolfgang Corcoran-Mathe</dc:creator><pubDate>Wed, 30 Jun 2021 12:00:00 -0800</pubDate></item><item><title>SRFI 221: Generator/accumulator sub-library</title><link>https://srfi.schemers.org/srfi-221/</link><guid>https://srfi.schemers.org/srfi-221</guid><description>SRFI 221 is now in <em>final</em> status.<blockquote><p>This is a set of convenience routines for generators and accumulators
intended to blend in with
<a href="https://srfi.schemers.org/srfi-158/srfi-158.html">SRFI 158</a>.
The authors recommend that they be added to the
<code>(srfi 158)</code> library provided by
users or implementations.
If they are approved by the R7RS-large process,
they can also be added to <code>(r7rs generator)</code>.</p></blockquote></description><dc:creator>John Cowan (text) and Arvydas Silanskas (implementation)</dc:creator><pubDate>Fri, 28 May 2021 12:00:00 -0800</pubDate></item><item><title>SRFI 220: Line directives</title><link>https://srfi.schemers.org/srfi-220/</link><guid>https://srfi.schemers.org/srfi-220</guid><description>SRFI 220 is now in <em>withdrawn</em> status.<blockquote> <p>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.</p>
<p>This SRFI extends the standard Scheme directive syntax
(<code>#!</code>) to support <em>line directives</em>. They look
like magic comments to language-agnostic tools but read as
S-expressions in Scheme, combining the portability of magic
comments with the well-defined syntax and easy parsing of
ordinary Scheme code.</p></blockquote></description><dc:creator>Lassi Kortela</dc:creator><pubDate>Tue, 20 Apr 2021 12:00:00 -0800</pubDate></item><item><title>SRFI 219: Define higher-order lambda</title><link>https://srfi.schemers.org/srfi-219/</link><guid>https://srfi.schemers.org/srfi-219</guid><description>SRFI 219 is now in <em>final</em> status.<blockquote><p>This SRFI codifies the following shorthand syntax, which some
Scheme implementations have had for a long time.</p>
<pre>(define ((outer-name outer-args ...) inner-args ...)
inner-body ...)</pre></blockquote></description><dc:creator>Lassi Kortela</dc:creator><pubDate>Sun, 04 Apr 2021 12:00:00 -0800</pubDate></item><item><title>SRFI 213: Identifier Properties</title><link>https://srfi.schemers.org/srfi-213/</link><guid>https://srfi.schemers.org/srfi-213</guid><description>SRFI 213 is now in <em>final</em> status.<blockquote><p>Using the <code>define-property</code> definition described in
this SRFI, expand-time properties can be associated with
identifiers in a referentially transparent and lexically scoped way.</p></blockquote></description><dc:creator>Marc Nieper-Wißkirchen</dc:creator><pubDate>Sun, 21 Mar 2021 12:00:00 -0800</pubDate></item><item><title>SRFI 214: Flexvectors</title><link>https://srfi.schemers.org/srfi-214/</link><guid>https://srfi.schemers.org/srfi-214</guid><description>SRFI 214 is now in <em>final</em> status.<blockquote><p>A <em>flexvector</em>, 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 <a href="https://srfi.schemers.org/srfi-133/srfi-133.html">SRFI 133</a>'s vector operations.</p></blockquote></description><dc:creator>Adam Nelson</dc:creator><pubDate>Thu, 18 Mar 2021 12:00:00 -0800</pubDate></item><item><title>SRFI 208: NaN procedures</title><link>https://srfi.schemers.org/srfi-208/</link><guid>https://srfi.schemers.org/srfi-208</guid><description>SRFI 208 is now in <em>final</em> status.<blockquote><p>This SRFI provides procedures that dissect NaN (Not a Number) inexact values.</p></blockquote></description><dc:creator>Emmanuel Medernach (design), John Cowan (editor), and Wolfgang Corcoran-Mathe (implementation)</dc:creator><pubDate>Tue, 23 Feb 2021 12:00:00 -0800</pubDate></item><item><title>SRFI 217: Integer Sets</title><link>https://srfi.schemers.org/srfi-217/</link><guid>https://srfi.schemers.org/srfi-217</guid><description>SRFI 217 is now in <em>final</em> status.<blockquote><p>Integer sets, or <em>iset</em>s, are unordered collections of
fixnums. (Fixnums are exact integers within certain
implementation-specified bounds.)</p></blockquote></description><dc:creator>John Cowan (text) and Wolfgang Corcoran-Mathe (implementation)</dc:creator><pubDate>Mon, 15 Feb 2021 12:00:00 -0800</pubDate></item><item><title>SRFI 210: Procedures and Syntax for Multiple Values</title><link>https://srfi.schemers.org/srfi-210/</link><guid>https://srfi.schemers.org/srfi-210</guid><description>SRFI 210 is now in <em>final</em> status.<blockquote><p>
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.
</p></blockquote></description><dc:creator>Marc Nieper-Wißkirchen</dc:creator><pubDate>Fri, 12 Feb 2021 12:00:00 -0800</pubDate></item><item><title>SRFI 212: Aliases</title><link>https://srfi.schemers.org/srfi-212/</link><guid>https://srfi.schemers.org/srfi-212</guid><description>SRFI 212 is now in <em>final</em> status.<blockquote><p>This SRFI introduces <em>alias definitions</em>, a syntactic
extension. An alias definition transfers the binding of one
identifier to another, effectively aliasing the identifier.</p></blockquote></description><dc:creator>Marc Nieper-Wißkirchen</dc:creator><pubDate>Fri, 12 Feb 2021 12:00:00 -0800</pubDate></item><item><title>SRFI 218: Unicode Numerals</title><link>https://srfi.schemers.org/srfi-218/</link><guid>https://srfi.schemers.org/srfi-218</guid><description>SRFI 218 is now in <em>withdrawn</em> status.<blockquote><p>These procedures allow the creation and interpretation of numerals
using any set of Unicode digits that support positional notation.</p></blockquote></description><dc:creator>John Cowan (text) and Arvydas Silanskas (implementation)</dc:creator><pubDate>Sat, 30 Jan 2021 12:00:00 -0800</pubDate></item><item><title>SRFI 216: SICP Prerequisites (Portable)</title><link>https://srfi.schemers.org/srfi-216/</link><guid>https://srfi.schemers.org/srfi-216</guid><description>SRFI 216 is now in <em>final</em> status.<blockquote><p>
This SRFI follows
<a href="https://srfi.schemers.org/srfi-203/">
SRFI 203
</a>
in providing "out-of-the-box" support for hosting the exercises suggested by
<a href="https://mitpress.mit.edu/sites/default/files/sicp/index.html">
Structure and Interpretation of Computer Programs
</a>
in portable Scheme.
</p>
<p>
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.
</p>
<p>
This SRFI provides procedures for working with time data, multi-threading, and streams, as well as SICP names for <code>true</code> and <code>false</code>.
</p>
<p>
None of these procedures is fit for production use. They are only designed for pedagogical purposes.
</p>
<p>
Students, however, are expected to be able to just write</p>
<pre>
(include (srfi sicp))</pre>
<p>and have the code from the book run without problems (apart from those intended by the book authors).
</p></blockquote></description><dc:creator>Vladimir Nikishkin</dc:creator><pubDate>Thu, 21 Jan 2021 12:00:00 -0800</pubDate></item><item><title>SRFI 201: Syntactic Extensions to the Core Scheme Bindings</title><link>https://srfi.schemers.org/srfi-201/</link><guid>https://srfi.schemers.org/srfi-201</guid><description>SRFI 201 is now in <em>final</em> status.<blockquote><p>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
<code>lambda</code>, <code>let</code>,
<code>let*</code> with pattern matching capabilities, to extend the forms <code>let</code>
and <code>or</code> with the ability
to handle multiple values, and to extend the form <code>define</code> with
the ability of defining "curried" functions.</p></blockquote></description><dc:creator>Panicz Maciej Godek</dc:creator><pubDate>Wed, 13 Jan 2021 12:00:00 -0800</pubDate></item><item><title>SRFI 215: Central Log Exchange</title><link>https://srfi.schemers.org/srfi-215/</link><guid>https://srfi.schemers.org/srfi-215</guid><description>SRFI 215 is now in <em>final</em> status.<blockquote> <p>
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.
</p></blockquote></description><dc:creator>Göran Weinholt</dc:creator><pubDate>Mon, 11 Jan 2021 12:00:00 -0800</pubDate></item><item><title>SRFI 206: Auxiliary Syntax Keywords</title><link>https://srfi.schemers.org/srfi-206/</link><guid>https://srfi.schemers.org/srfi-206</guid><description>SRFI 206 is now in <em>final</em> status.<blockquote>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
<code>syntax-rules</code> and <code>syntax-case</code> expressions
and can be both imported under the same name without conflicts.</blockquote></description><dc:creator>Marc Nieper-Wißkirchen</dc:creator><pubDate>Mon, 21 Dec 2020 12:00:00 -0800</pubDate></item><item><title>SRFI 209: Enums and Enum Sets</title><link>https://srfi.schemers.org/srfi-209/</link><guid>https://srfi.schemers.org/srfi-209</guid><description>SRFI 209 is now in <em>final</em> status.<blockquote><p>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.</p></blockquote></description><dc:creator>John Cowan (text) and Wolfgang Corcoran-Mathe (implementation)</dc:creator><pubDate>Thu, 17 Dec 2020 12:00:00 -0800</pubDate></item><item><title>SRFI 202: Pattern-matching Variant of the and-let* Form that Supports Multiple Values</title><link>https://srfi.schemers.org/srfi-202/</link><guid>https://srfi.schemers.org/srfi-202</guid><description>SRFI 202 is now in <em>final</em> status.<blockquote><p>The SRFI-2 library introduced the <code>and-let*</code> form
for short-circuited evaluation in the style of the <code>and</code>
form, with the ability to capture the (non-<code>#f</code>) results
in the style of the <code>let*</code> form. This document extends
the <code>and-let*</code> 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
falsehood of the first value causes short-circuiting).
</p></blockquote></description><dc:creator>Panicz Maciej Godek</dc:creator><pubDate>Sat, 28 Nov 2020 12:00:00 -0800</pubDate></item><item><title>SRFI 207: String-notated bytevectors</title><link>https://srfi.schemers.org/srfi-207/</link><guid>https://srfi.schemers.org/srfi-207</guid><description>SRFI 207 is now in <em>final</em> status.<blockquote><p>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,
characters, strings, and/or bytevectors, and for manipulating
bytevectors as if they were strings as far as possible.</p></blockquote></description><dc:creator>Daphne Preston-Kendal (external notation), John Cowan (procedure design), and Wolfgang Corcoran-Mathe (implementation)</dc:creator><pubDate>Thu, 29 Oct 2020 12:00:00 -0800</pubDate></item><item><title>SRFI 170: POSIX API</title><link>https://srfi.schemers.org/srfi-170/</link><guid>https://srfi.schemers.org/srfi-170</guid><description>SRFI 170 is now in <em>final</em> status.<blockquote><p>
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 P<small>OSIX</small>, the Portable
Operating System Interface standardized by the IEEE. Not all of the
functions of this SRFI are available on all operating systems.
</p></blockquote></description><dc:creator>Olin Shivers (original author), John Cowan (editor and shepherd), and Harold Ancell (implementer and editor)</dc:creator><pubDate>Wed, 28 Oct 2020 12:00:00 -0800</pubDate></item><item><title>SRFI 196: Range Objects</title><link>https://srfi.schemers.org/srfi-196/</link><guid>https://srfi.schemers.org/srfi-196</guid><description>SRFI 196 is now in <em>final</em> status.<blockquote><p>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
defined on lists, vectors, strings, and other collections. If
necessary, a range can be converted to a list, vector, or string of
its elements or a generator that will lazily produce each element in
the range.</p></blockquote></description><dc:creator>John Cowan (text) and Wolfgang Corcoran-Mathe (sample implementation)</dc:creator><pubDate>Thu, 17 Sep 2020 12:00:00 -0800</pubDate></item><item><title>SRFI 203: A Simple Picture Language in the Style of SICP</title><link>https://srfi.schemers.org/srfi-203/</link><guid>https://srfi.schemers.org/srfi-203</guid><description>SRFI 203 is now in <em>final</em> status.<blockquote><p>This SRFI proposes a simple library for programmatic drawing of
pictures compatible with Section 2.2.4 of <cite>Structure and
Interpretation of Computer Programs</cite>.</p>
<p>It aims to close the gap between the Scheme suggested for study in
the book and portable Scheme.</p></blockquote></description><dc:creator>Vladimir Nikishkin</dc:creator><pubDate>Thu, 17 Sep 2020 12:00:00 -0800</pubDate></item><item><title>SRFI 197: Pipeline Operators</title><link>https://srfi.schemers.org/srfi-197/</link><guid>https://srfi.schemers.org/srfi-197</guid><description>SRFI 197 is now in <em>final</em> status.<blockquote><p>Many functional languages provide pipeline operators, like Clojure's <code>-></code> or OCaml's <code>|></code>. Pipelines are a simple, terse, and readable way to write deeply-nested expressions. This SRFI defines a family of <code>chain</code> and <code>nest</code> pipeline operators, which can rewrite nested expressions like <code>(a b (c d (e f g)))</code> as a sequence of operations: <code>(chain g (e f _) (c d _) (a b _))</code>.</p></blockquote></description><dc:creator>Adam Nelson</dc:creator><pubDate>Sat, 12 Sep 2020 12:00:00 -0800</pubDate></item><item><title>SRFI 198: Foreign Interface Status</title><link>https://srfi.schemers.org/srfi-198/</link><guid>https://srfi.schemers.org/srfi-198</guid><description>SRFI 198 is now in <em>withdrawn</em> status.<blockquote><p>
This SRFI provides means to construct, return or signal, and extract
information from Scheme interfaces with "foreign" systems such as the
P<small>OSIX</small> API, databases, and libraries.
</p></blockquote></description><dc:creator>John Cowan (editor and shepherd), Harold Ancell (implementer and editor), and Lassi Kortela (architect)</dc:creator><pubDate>Sat, 12 Sep 2020 12:00:00 -0800</pubDate></item><item><title>SRFI 193: Command line</title><link>https://srfi.schemers.org/srfi-193/</link><guid>https://srfi.schemers.org/srfi-193</guid><description>SRFI 193 is now in <em>final</em> status.<blockquote><p>R<sup>6</sup>RS and R<sup>7</sup>RS define a
<code>command-line</code> procedure. While a useful baseline, the
specification is not detailed enough to cover all practical
situations. This SRFI clarifies the definition of
<code>command-line</code> and adds a few related procedures.
Scheme scripts, standalone executables, compilation and REPL use
are accounted for. Option parsing is out of scope.</p></blockquote></description><dc:creator>Lassi Kortela</dc:creator><pubDate>Thu, 10 Sep 2020 12:00:00 -0800</pubDate></item><item><title>SRFI 181: Custom ports (including transcoded ports)</title><link>https://srfi.schemers.org/srfi-181/</link><guid>https://srfi.schemers.org/srfi-181</guid><description>SRFI 181 is now in <em>final</em> status.<blockquote><p>This SRFI is derived from parts of
<a href="http://www.r6rs.org/final/html/r6rs-lib/r6rs-lib-Z-H-1.html#node_toc_node_sec_8.2.4">
library section 8.2.4</a>,
<a href="http://www.r6rs.org/final/html/r6rs-lib/r6rs-lib-Z-H-9.html#node_sec_8.2.7">
library section 8.2.7</a>,
<a href="http://www.r6rs.org/final/html/r6rs-lib/r6rs-lib-Z-H-9.html#node_sec_8.2.10">
library section 8.2.10</a>, and
<a href="http://www.r6rs.org/final/html/r6rs-lib/r6rs-lib-Z-H-9.html#node_sec_8.2.13">
library section 8.2.13</a>
of the R6RS.
These sections are themselves based on parts of
<a href="http://srfi.schemers.org/srfi-79/srfi-79.html">SRFI 79</a>,
<a href="http://srfi.schemers.org/srfi-80/srfi-80.html">SRFI 80</a> and
<a href="http://srfi.schemers.org/srfi-81/srfi-81.html">SRFI 81</a>.
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 input ports or to consume data from output ports.
Procedures for creating ports that transcode
between bytes and characters are an important special
case and are also documented in this SRFI.
</p></blockquote></description><dc:creator>John Cowan</dc:creator><pubDate>Tue, 08 Sep 2020 12:00:00 -0800</pubDate></item><item><title>SRFI 186: Transcoders and transcoded ports</title><link>https://srfi.schemers.org/srfi-186/</link><guid>https://srfi.schemers.org/srfi-186</guid><description>SRFI 186 is now in <em>withdrawn</em> status.<blockquote><p>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.</p></blockquote></description><dc:creator>John Cowan</dc:creator><pubDate>Tue, 08 Sep 2020 12:00:00 -0800</pubDate></item><item><title>SRFI 195: Multiple-value boxes</title><link>https://srfi.schemers.org/srfi-195/</link><guid>https://srfi.schemers.org/srfi-195</guid><description>SRFI 195 is now in <em>final</em> status.<blockquote><p>
This SRFI extends the specification of the boxes
of <a href="https://srfi.schemers.org/srfi-111/srfi-111.html">SRFI
111</a> 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.
</p></blockquote></description><dc:creator>Marc Nieper-Wißkirchen</dc:creator><pubDate>Fri, 28 Aug 2020 12:00:00 -0800</pubDate></item><item><title>SRFI 194: Random data generators</title><link>https://srfi.schemers.org/srfi-194/</link><guid>https://srfi.schemers.org/srfi-194</guid><description>SRFI 194 is now in <em>final</em> status.<blockquote><p>This SRFI defines a set of
<a href="https://srfi.schemers.org/srfi-158/srfi-158.html">SRFI 158</a>
generators and generator makers that yield random data of specific
ranges and distributions. It is intended to be implemented on top of
<a href="https://srfi.schemers.org/srfi-27/srfi-27.html">SRFI 27</a>,
which provides the underlying source of random integers and floats.</p></blockquote></description><dc:creator>Shiro Kawai (design), Arvydas Silanskas (implementation), John Cowan (editor and shepherd), and Linas Vepštas (implementation)</dc:creator><pubDate>Wed, 26 Aug 2020 12:00:00 -0800</pubDate></item><item><title>SRFI 178: Bitvector library</title><link>https://srfi.schemers.org/srfi-178/</link><guid>https://srfi.schemers.org/srfi-178</guid><description>SRFI 178 is now in <em>final</em> status.<blockquote><p>This SRFI describes a set of operations on
homogeneous bitvectors.
Operations analogous to those provided on the other homogeneous
vector types described in
<a href="https://srfi.schemers.org/srfi-160/srfi-160.html">SRFI 160</a>
are provided,
along with operations analogous to the bitwise operations of
<a href="https://srfi.schemers.org/srfi-151/srfi-151.html">SRFI 151</a>.</p></blockquote></description><dc:creator>John Cowan (text) and Wolfgang Corcoran-Mathe (implementation)</dc:creator><pubDate>Tue, 25 Aug 2020 12:00:00 -0800</pubDate></item><item><title>SRFI 159: Combinator Formatting</title><link>https://srfi.schemers.org/srfi-159/</link><guid>https://srfi.schemers.org/srfi-159</guid><description>SRFI 159 is now in <em>withdrawn</em> status.<blockquote><p>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.</p></blockquote></description><dc:creator>Alex Shinn</dc:creator><pubDate>Fri, 31 Jul 2020 12:00:00 -0800</pubDate></item><item><title>SRFI 177: Portable keyword arguments</title><link>https://srfi.schemers.org/srfi-177/</link><guid>https://srfi.schemers.org/srfi-177</guid><description>SRFI 177 is now in <em>withdrawn</em> status.<blockquote><p>Many Scheme implementations have keyword arguments, but they
have not been widely standardized. This SRFI defines the macros
<code>lambda/kw</code> and <code>call/kw</code>. 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.</p></blockquote></description><dc:creator>Lassi Kortela</dc:creator><pubDate>Fri, 31 Jul 2020 12:00:00 -0800</pubDate></item><item><title>SRFI 192: Port Positioning</title><link>https://srfi.schemers.org/srfi-192/</link><guid>https://srfi.schemers.org/srfi-192</guid><description>SRFI 192 is now in <em>final</em> status.<blockquote><p>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.</p></blockquote></description><dc:creator>John Cowan and Shiro Kawai (implementation; requires a hook)</dc:creator><pubDate>Fri, 31 Jul 2020 12:00:00 -0800</pubDate></item><item><title>SRFI 166: Monadic Formatting</title><link>https://srfi.schemers.org/srfi-166/</link><guid>https://srfi.schemers.org/srfi-166</guid><description>SRFI 166 is now in <em>final</em> status.<blockquote><p>
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.</p>
<p>
This SRFI is an updated version of SRFI 159, primarily with the
difference that state variables are hygienic.</p>
<p>
Summary of differences from SRFI 159:
<ul>
<li>State variables are first class and hygienic</li>
<li>Added <code>written-shared</code>, <code>pretty-shared</code></li>
<li>Added <code>as-italic</code>, <code>as-color</code>, <code>as-true-color</code>, <code>on-<i>color</i></code> background variants, and <code>pretty-with-color</code></li>
<li>Added <code>ambiguous-is-wide?</code> state variable and <code>string-terminal-width/wide</code> utility</li>
<li>Added <code>substring/width</code> state var for width-aware substring operations, with <code>substring-terminal-width(/wide)</code> utilities</li>
<li>Added <code>substring/preserve</code> state var used in trimming, with <code>substring-terminal-preserve</code> utility</li>
<li>Added <code>pretty-environment</code> state variable</li>
<li>Renamed <code>as-unicode</code> to <code>terminal-aware</code></li>
<li>Restored non-uniform comma rules as needed in India</li>
<li>Restored <code>upcased</code> and <code>downcased</code></li>
<li>Several clarifications and more examples</li>
</ul></p></blockquote></description><dc:creator>Alex Shinn</dc:creator><pubDate>Thu, 30 Jul 2020 12:00:00 -0800</pubDate></item><item><title>SRFI 199: POSIX errno manipulation</title><link>https://srfi.schemers.org/srfi-199/</link><guid>https://srfi.schemers.org/srfi-199</guid><description>SRFI 199 is now in <em>withdrawn</em> status.<blockquote><p>The majority of P<small>OSIX</small> system and library calls
require accessing <code>errno</code> 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.
</p></blockquote></description><dc:creator>Harold Ancell</dc:creator><pubDate>Sun, 19 Jul 2020 12:00:00 -0800</pubDate></item><item><title>SRFI 189: Maybe and Either: optional container types</title><link>https://srfi.schemers.org/srfi-189/</link><guid>https://srfi.schemers.org/srfi-189</guid><description>SRFI 189 is now in <em>final</em> status.<blockquote><p>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).</p>
<p>Note that the terms Maybe, Just, Nothing, Either, Right, and Left
are capitalized in this SRFI so as not to be confused with their
ordinary use as English words. Thus "returns Nothing" means
"returns the unique Nothing object"; "returns nothing" could be
interpreted as "returns no values"
or "returns an unspecified value".</p></blockquote></description><dc:creator>John Cowan (text) and Wolfgang Corcoran-Mathe (sample implementation)</dc:creator><pubDate>Tue, 14 Jul 2020 12:00:00 -0800</pubDate></item><item><title>SRFI 191: Procedure Arity Inspection</title><link>https://srfi.schemers.org/srfi-191/</link><guid>https://srfi.schemers.org/srfi-191</guid><description>SRFI 191 is now in <em>withdrawn</em> status.<blockquote><p>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.</p></blockquote></description><dc:creator>John Cowan</dc:creator><pubDate>Sun, 05 Jul 2020 12:00:00 -0800</pubDate></item><item><title>SRFI 180: JSON</title><link>https://srfi.schemers.org/srfi-180/</link><guid>https://srfi.schemers.org/srfi-180</guid><description>SRFI 180 is now in <em>final</em> status.<blockquote><p>This library describes a JavaScript Object Notation (JSON) parser and printer. It supports JSON that may be bigger than memory.</p></blockquote></description><dc:creator>Amirouche Boubekki</dc:creator><pubDate>Wed, 01 Jul 2020 12:00:00 -0800</pubDate></item><item><title>SRFI 179: Nonempty Intervals and Generalized Arrays (Updated)</title><link>https://srfi.schemers.org/srfi-179/</link><guid>https://srfi.schemers.org/srfi-179</guid><description>SRFI 179 is now in <em>final</em> status.<blockquote><p>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 <i>domain</i> 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_1,u_1)\times\cdots\times[l_{d-1},u_{d-1})$ of $\mathbb Z^d$, $d$-tuples of integers. Thus, we introduce a data type called $d$-<i>intervals</i>, or more briefly <i>intervals</i>, that encapsulates this notion. (We borrow this terminology from, e.g., Elias Zakon's <a href="http://www.trillia.com/zakon1.html">Basic Concepts of Mathematics</a>.) Specialized variants of arrays are specified to provide portable programs with efficient representations for common use cases.</p></blockquote></description><dc:creator>Bradley J. Lucier</dc:creator><pubDate>Tue, 30 Jun 2020 12:00:00 -0800</pubDate></item><item><title>SRFI 190: Coroutine Generators</title><link>https://srfi.schemers.org/srfi-190/</link><guid>https://srfi.schemers.org/srfi-190</guid><description>SRFI 190 is now in <em>final</em> status.<blockquote><p>This SRFI defines syntax to create
<a href="https://srfi.schemers.org/srfi-121/">SRFI
121</a>/<a href="https://srfi.schemers.org/srfi-158/">158</a>
coroutine generators conveniently and in the flavor of Python
generator functions.
</p></blockquote></description><dc:creator>Marc Nieper-Wißkirchen</dc:creator><pubDate>Thu, 11 Jun 2020 12:00:00 -0800</pubDate></item><item><title>SRFI 188: Splicing binding constructs for syntactic keywords</title><link>https://srfi.schemers.org/srfi-188/</link><guid>https://srfi.schemers.org/srfi-188</guid><description>SRFI 188 is now in <em>final</em> status.<blockquote><p>Splicing binding constructs for syntactic keywords are versions
of <code>let-syntax</code> and <code>letrec-syntax</code> that can
be used in a definition context in the same way
as <code>begin</code>.
</p></blockquote></description><dc:creator>Marc Nieper-Wißkirchen</dc:creator><pubDate>Wed, 03 Jun 2020 12:00:00 -0800</pubDate></item><item><title>SRFI 185: Linear adjustable-length strings</title><link>https://srfi.schemers.org/srfi-185/</link><guid>https://srfi.schemers.org/srfi-185</guid><description>SRFI 185 is now in <em>final</em> status.<blockquote><p>
Scheme specifies mutable fixed-length strings.
<a href="https://srfi.schemers.org/srfi-118/srfi-118.html">SRFI 118</a>
adds two procedures, <code>string-append!</code> and
<code>string-replace!</code>, 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.</p></blockquote></description><dc:creator>John Cowan</dc:creator><pubDate>Sun, 26 Apr 2020 12:00:00 -0800</pubDate></item><item><title>SRFI 182: ADBMAL, ALET, and ALET*</title><link>https://srfi.schemers.org/srfi-182/</link><guid>https://srfi.schemers.org/srfi-182</guid><description>SRFI 182 is now in <em>withdrawn</em> status.<blockquote><p>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
&lt;formals> and &lt;body> requires some actual arguments later
when the evaluated LAMBDA expression is called, an ADBMAL expression
that consists of &lt;expression>s corresponding to actual arguments
of LAMBDA requires &lt;formals> and &lt;body>, that is, an
evaluated LAMBDA expression, later when the evaluated ADBMAL
expression is called.</p>
<p>This SRFI also introduces the new LET-syntax ALET and ALET*, which
depend on ADBMAL to manipulate multiple values, and which are
compatible with LET and LET* of R5RS in single-value bindings. They
also have a binding form making use of VALUES and CALL-WITH-VALUES to
handle multiple values, and new binding forms for list, cons, and
other multiple values. In addition, they have several new binding
forms for useful functions such as escape, iteration, optional
arguments, etc.</p></blockquote></description><dc:creator>Joo ChurlSoo</dc:creator><pubDate>Fri, 27 Mar 2020 12:00:00 -0800</pubDate></item><item><title>SRFI 183: Another format procedure, Fox</title><link>https://srfi.schemers.org/srfi-183/</link><guid>https://srfi.schemers.org/srfi-183</guid><description>SRFI 183 is now in <em>withdrawn</em> status.<blockquote><p>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.</p></blockquote></description><dc:creator>Joo ChurlSoo</dc:creator><pubDate>Fri, 27 Mar 2020 12:00:00 -0800</pubDate></item><item><title>SRFI 184: define-record-lambda</title><link>https://srfi.schemers.org/srfi-184/</link><guid>https://srfi.schemers.org/srfi-184</guid><description>SRFI 184 is now in <em>withdrawn</em> status.<blockquote><p>This SRFI introduces a macro, DEFINE-RECORD-LAMBDA, that defines a
set of procedures, that is, a group of constructors and a predicate.
The constructors also make a group of procedures, namely record
lambdas, that have no explicit field accessors and mutators. They
can have various kinds of fields, such as common fields, required
fields, optional fields, automatic fields, read-only fields,
read-write fields, invisible fields, immutable fields, and virtual
fields.</p></blockquote></description><dc:creator>Joo ChurlSoo</dc:creator><pubDate>Fri, 27 Mar 2020 12:00:00 -0800</pubDate></item><item><title>SRFI 187: ALAMBDA and ADEFINE</title><link>https://srfi.schemers.org/srfi-187/</link><guid>https://srfi.schemers.org/srfi-187</guid><description>SRFI 187 is now in <em>withdrawn</em> status.<blockquote><p>This SRFI introduces alambda, which creates a procedure that checks
its actual arguments, takes various types of required and optional
variables.<br> This SRFI is based on
<a href="https://srfi.schemers.org/srfi-92/">SRFI 92</a>
as an extension of the optional arguments of
<a href="https://srfi.schemers.org/srfi-182/">SRFI 182</a>.</p></blockquote></description><dc:creator>Joo ChurlSoo</dc:creator><pubDate>Fri, 27 Mar 2020 12:00:00 -0800</pubDate></item><item><title>SRFI 176: Version flag</title><link>https://srfi.schemers.org/srfi-176/</link><guid>https://srfi.schemers.org/srfi-176</guid><description>SRFI 176 is now in <em>final</em> status.<blockquote><p>This SRFI defines a standard command-line flag to get version
information from a Scheme implementation. The output is
Line-oriented S-expressions which are easy to parse from Scheme, C,
and shell scripts and can co-exist with non-S-expression output. A
standard vocabulary is defined; extensions are easy to make.</p></blockquote></description><dc:creator>Lassi Kortela</dc:creator><pubDate>Mon, 24 Feb 2020 12:00:00 -0800</pubDate></item><item><title>SRFI 174: POSIX Timespecs</title><link>https://srfi.schemers.org/srfi-174/</link><guid>https://srfi.schemers.org/srfi-174</guid><description>SRFI 174 is now in <em>final</em> status.<blockquote><p>This SRFI defines the trivial type <i>timespec</i>, which is used
to represent the <code>struct timespec</code> defined by the
<a href="https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/time.h.html">
P<small>OSIX</small> <code>&lt;time.h></code> header</a>.</p></blockquote></description><dc:creator>John Cowan</dc:creator><pubDate>Sat, 21 Dec 2019 12:00:00 -0800</pubDate></item><item><title>SRFI 175: ASCII character library</title><link>https://srfi.schemers.org/srfi-175/</link><guid>https://srfi.schemers.org/srfi-175</guid><description>SRFI 175 is now in <em>final</em> status.<blockquote> <p>This SRFI defines ASCII-only equivalents to many of the
character procedures in standard Scheme plus a few extra ones.
Recent Scheme standards are based around Unicode but the
significant syntactic elements in many file formats and network
protocols are all ASCII. Such low-level code can run faster and
its behavior can be easier to understand when it uses ASCII
primitives.</p></blockquote></description><dc:creator>Lassi Kortela</dc:creator><pubDate>Fri, 20 Dec 2019 12:00:00 -0800</pubDate></item><item><title>SRFI 172: Two Safer Subsets of R7RS</title><link>https://srfi.schemers.org/srfi-172/</link><guid>https://srfi.schemers.org/srfi-172</guid><description>SRFI 172 is now in <em>final</em> status.<blockquote><p>This SRFI provides two libraries for use with R7RS that provide a
way to sandbox the <code>eval</code> procedure to make it safer to use
in evaluating Scheme expressions of doubtful provenance. The intention
is to call <code>eval</code>, passing it an S-expression representing a
Scheme procedure and the environment defined by one of these libraries.
Since code evaluated by <code>eval</code> runs in a null lexical
environment, the resulting procedure can then be invoked with less
concern about possible side effects.
</p>
<p><b>Use of these libraries does not provide any sort of safety
guarantee. There are still many loopholes uncaught, including
attempts to process circular structure and over-allocation of memory.
The claim is only that the probability of such an attack is reduced,
not that it is eliminated.
However, using these libraries is a simple provision that is easy to
implement and easy to use. For higher safety, it can readily be
combined with other provisions.
</b></p></blockquote></description><dc:creator>John Cowan</dc:creator><pubDate>Sun, 10 Nov 2019 12:00:00 -0800</pubDate></item><item><title>SRFI 167: Ordered Key Value Store</title><link>https://srfi.schemers.org/srfi-167/</link><guid>https://srfi.schemers.org/srfi-167</guid><description>SRFI 167 is now in <em>final</em> status.<blockquote><p>This library describes an interface for an ordered key-value store
that is suitable for implementing a storage engine for the generic
tuple-store SRFI. It maps cleanly to existing ordered key-value
databases that may or may not provide transactions.</p></blockquote></description><dc:creator>Amirouche Boubekki</dc:creator><pubDate>Fri, 08 Nov 2019 12:00:00 -0800</pubDate></item><item><title>SRFI 168: Generic Tuple Store Database</title><link>https://srfi.schemers.org/srfi-168/</link><guid>https://srfi.schemers.org/srfi-168</guid><description>SRFI 168 is now in <em>final</em> status.<blockquote><p>This library is a generic approach to the database abstractions
known as triplestore and quadstore. Generic Tuple Store Database
implements n-tuple ordered sets and associated primitives for
working with them in the context of data management.</p></blockquote></description><dc:creator>Amirouche Boubekki</dc:creator><pubDate>Fri, 08 Nov 2019 12:00:00 -0800</pubDate></item><item><title>SRFI 171: Transducers</title><link>https://srfi.schemers.org/srfi-171/</link><guid>https://srfi.schemers.org/srfi-171</guid><description>SRFI 171 is now in <em>final</em> status.<blockquote><p>A library implementing transducers &amp;mdash; composable algorithmic
transformations. Scheme has many different ways of expressing
transformations over different collection types, but they are all
unique to whatever base type they work on. This SRFI proposes a new
construct, the transducer, that is oblivious to the context in which
it is being used.</p></blockquote></description><dc:creator>Linus Björnstam</dc:creator><pubDate>Sat, 26 Oct 2019 12:00:00 -0800</pubDate></item><item><title>SRFI 173: Hooks</title><link>https://srfi.schemers.org/srfi-173/</link><guid>https://srfi.schemers.org/srfi-173</guid><description>SRFI 173 is now in <em>final</em> status.<blockquote><p>This library describes a mechanism known as hooks. Hooks are a
certain kind of extension point in a program that allows
interleaving the execution of arbitrary code with the execution of
the program without introducing any coupling between the two.</p></blockquote></description><dc:creator>Amirouche Boubekki</dc:creator><pubDate>Thu, 24 Oct 2019 12:00:00 -0800</pubDate></item><item><title>SRFI 165: The Environment Monad</title><link>https://srfi.schemers.org/srfi-165/</link><guid>https://srfi.schemers.org/srfi-165</guid><description>SRFI 165 is now in <em>final</em> status.<blockquote>Monads model computations. The environment monad models
computations that depend on values from a shared environment.
These computations can read values from the environment, pass
values to subsequent computations, execute sub-computations in an
extended environment, and modify the environment for future
computations.</blockquote></description><dc:creator>Marc Nieper-Wißkirchen</dc:creator><pubDate>Thu, 05 Sep 2019 12:00:00 -0800</pubDate></item><item><title>SRFI 160: Homogeneous numeric vector libraries</title><link>https://srfi.schemers.org/srfi-160/</link><guid>https://srfi.schemers.org/srfi-160</guid><description>SRFI 160 is now in <em>final</em> status.<blockquote><p>This SRFI describes a set of operations on SRFI 4 homogeneous vector
types (plus a few additional types) that are closely analogous
to the vector operations library,
<a href="http://srfi.schemers.org/srfi-133/srfi-133.html">
SRFI 133</a>.
An external representation is specified which may be supported by the
<code>read</code> and <code>write</code> procedures and by the program
parser so that programs can contain references to literal homogeneous
vectors.</p></blockquote></description><dc:creator>John Cowan and Shiro Kawai (contributed a major patch)</dc:creator><pubDate>Tue, 27 Aug 2019 12:00:00 -0800</pubDate></item><item><title>SRFI 162: Comparators sublibrary</title><link>https://srfi.schemers.org/srfi-162/</link><guid>https://srfi.schemers.org/srfi-162</guid><description>SRFI 162 is now in <em>final</em> status.<blockquote><p>
This SRFI provides a few extra procedures and comparators to go
with SRFI 128, Comparators. Implementers are urged to add them to
their SRFI 128 libraries, for which reason they are not packaged
as a separate library.
</p></blockquote></description><dc:creator>John Cowan</dc:creator><pubDate>Tue, 27 Aug 2019 12:00:00 -0800</pubDate></item><item><title>SRFI 164: Enhanced multi-dimensional Arrays</title><link>https://srfi.schemers.org/srfi-164/</link><guid>https://srfi.schemers.org/srfi-164</guid><description>SRFI 164 is now in <em>final</em> status.<blockquote><p>This SRFI describes the array data type (a generalization of
vectors to multiple indexes or dimensions), along with a set of
procedures for working on them.</p>
<p>This specification is an extension of <a href="http://srfi.schemers.org/srfi-25/srfi-25.html">SRFI 25</a>,
with additions from Racket’s
<a href="https://docs.racket-lang.org/math/array.html">math.array</a> package
and other sources. It has been implemented in the <a href="https://www.gnu.org/software/kawa/Arrays.html">Kawa dialect of Scheme</a>.</p></blockquote></description><dc:creator>Per Bothner</dc:creator><pubDate>Thu, 08 Aug 2019 12:00:00 -0800</pubDate></item><item><title>SRFI 169: Underscores in numbers</title><link>https://srfi.schemers.org/srfi-169/</link><guid>https://srfi.schemers.org/srfi-169</guid><description>SRFI 169 is now in <em>final</em> status.<blockquote><p>Many people find that large numbers are easier to read when the
digits are broken into small groups. For example, the number
<code>1582439</code> might be easier to read if written as <code>1
582 439</code>. This applies to source code as it does to other
writing. We propose an extension of Scheme syntax to allow the
underscore as a digit separator in numerical constants.</p></blockquote></description><dc:creator>Lassi Kortela</dc:creator><pubDate>Fri, 26 Jul 2019 12:00:00 -0800</pubDate></item><item><title>SRFI 121: Generators</title><link>https://srfi.schemers.org/srfi-121/</link><guid>https://srfi.schemers.org/srfi-121</guid><description>SRFI 121 is now in <em>withdrawn</em> status.<blockquote> <p>This SRFI defines utility procedures that
create, transform, and consume generators. A generator is simply a
procedure with no arguments that works as a source of a series of values.
Every time it is called, it yields a value. Generators may be finite or
infinite; a finite generator returns an end-of-file object to indicate
that it is exhausted. For example, <code>read-char</code>,
<code>read-line</code>, and <code>read</code> are generators that
generate characters, lines, and objects from the current input port.
Generators provide lightweight laziness.</p></blockquote></description><dc:creator>Shiro Kawai, John Cowan, and Thomas Gilray</dc:creator><pubDate>Thu, 18 Jul 2019 12:00:00 -0800</pubDate></item><item><title>SRFI 161: Unifiable Boxes</title><link>https://srfi.schemers.org/srfi-161/</link><guid>https://srfi.schemers.org/srfi-161</guid><description>SRFI 161 is now in <em>final</em> status.<blockquote><p>
Unifiable boxes are, like the boxes
of <a href="https://srfi.schemers.org/srfi-111/srfi-111.html">SRFI
111</a>, objects with a single mutable state. A constructor,
predicate, accessor, and mutator are provided.
</p>
<p>
In addition to this, an equality predicate and union operations (link,
union, unify) are provided. Applying a union operation to two
unifiable boxes makes the two boxes equal (in the sense of the
equality predicate). As a consequence, their state will also become
identical. In the case of link and union, it will be the state of one
of the two unioned boxes. In the case of unify, the state is
determined by a supplied unification procedure.
</p>
<p>
Unifiable boxes are
also known under the names <i>disjoint-set data
structure</i>, <i>union–find data structure</i> or <i>merge–find
set</i>.
</p></blockquote></description><dc:creator>Marc Nieper-Wißkirchen</dc:creator><pubDate>Fri, 08 Feb 2019 12:00:00 -0800</pubDate></item><item><title>SRFI 163: Enhanced array literals</title><link>https://srfi.schemers.org/srfi-163/</link><guid>https://srfi.schemers.org/srfi-163</guid><description>SRFI 163 is now in <em>final</em> status.<blockquote><p>This is a specification of a reader form (literals)
for multi-dimensional arrays.
It is an extension of the Common Lisp array reader syntax to handle
non-zero lower bounds, optional explicit bounds,
and optional uniform element types (compatible with <a href="https://srfi.schemers.org/srfi-4">SRFI 4</a>).
It can be used in conjunction with <a href="https://srfi.schemers.org/srfi-25">SRFI 25</a>, <a href="https://srfi.schemers.org/srfi-122">SRFI 122</a>,
or <a href="https://srfi.schemers.org/srfi-164">SRFI 164</a>.
These extensions were implemented in Guile (except the handling of rank-0 arrays),
and later in Kawa.
</p><p>There are recommendations for output formatting
and a suggested <code>format-array</code> procedure.</p></blockquote></description><dc:creator>Per Bothner</dc:creator><pubDate>Fri, 18 Jan 2019 12:00:00 -0800</pubDate></item><item><title>SRFI 146: Mappings</title><link>https://srfi.schemers.org/srfi-146/</link><guid>https://srfi.schemers.org/srfi-146</guid><description>SRFI 146 is now in <em>final</em> status.<blockquote> <p><em>Mappings</em> are finite sets of
associations, where each association is a pair consisting of a key and an
arbitrary Scheme value. The keys are elements of a suitable domain. Each
mapping holds no more than one association with the same key. The
fundamental mapping operation is retrieving the value of an association
stored in the mapping when the key is given.</p></blockquote></description><dc:creator>Arthur A. Gleckler and Marc Nieper-Wißkirchen</dc:creator><pubDate>Thu, 24 May 2018 12:00:00 -0800</pubDate></item><item><title>SRFI 150: Hygienic ERR5RS Record Syntax (reduced)</title><link>https://srfi.schemers.org/srfi-150/</link><guid>https://srfi.schemers.org/srfi-150</guid><description>SRFI 150 is now in <em>final</em> status.<blockquote> <p>
This SRFI provides a specification and portable implementation of an
extension of the ERR5RS record syntax
of <a href="https://srfi.schemers.org/srfi-131/srfi-131.html">SRFI
131</a>, where field names inserted by macro transformers are
effectively renamed as if the macro transformer inserted a binding.
This makes this SRFI compatible with the semantics of the record-type
definitions of
the <a href="https://bitbucket.org/cowan/r7rs/src/draft-10/rnrs/r7rs.pdf">R7RS</a>
as intended by
its <a href="https://groups.google.com/d/msg/scheme-reports-wg2/oKuhgwaM45w/KXgPrh8oAwAJ">authors</a>.
In addition, field names may also be other types of Scheme datums,
like numbers and strings, or
<a href="https://srfi.schemers.org/srfi-88/srfi-88.html">SRFI 88</a> keyword objects.</p></blockquote></description><dc:creator>Marc Nieper-Wißkirchen</dc:creator><pubDate>Tue, 16 Jan 2018 12:00:00 -0800</pubDate></item><item><title>SRFI 156: Syntactic combiners for binary predicates</title><link>https://srfi.schemers.org/srfi-156/</link><guid>https://srfi.schemers.org/srfi-156</guid><description>SRFI 156 is now in <em>final</em> status.<blockquote><p>Recognizing binary predicates as a specific area
in which the use of prefix operators is an impediment,
we propose a thin layer of "syntactic stevia" for in-fixing
such predicates. It can be implemented using regular Scheme
macros. We suggest that the code <code>(is x &lt; y)</code> should
be transformed to <code>(&lt; x y)</code>, and <code>(is x &lt; y &lt;= z)</code>
-- to <code>(let ((y* y)) (and (&lt; x y*) (&lt;= y* z)))</code>.
In addition, we suggest special meaning to the <code>_</code> symbol:
<code>(is _ &lt; y)</code> and <code>(is x &lt; _)</code>
should be transformed to <code>(lambda (_) (&lt; _ y))</code>
and <code>(lambda (_) (&lt; x _))</code>, respectively.
This SRFI document also describes some other uses of the
<code>is</code> macro and its limitations.</p></blockquote></description><dc:creator>Panicz Maciej Godek</dc:creator><pubDate>Mon, 18 Dec 2017 12:00:00 -0800</pubDate></item><item><title>SRFI 158: Generators and Accumulators</title><link>https://srfi.schemers.org/srfi-158/</link><guid>https://srfi.schemers.org/srfi-158</guid><description>SRFI 158 is now in <em>final</em> status.<blockquote><p>This SRFI defines utility procedures that create, transform, and consume generators.
A generator is simply a procedure with no arguments that works
as a source of values. Every time it is called,
it yields a value. Generators may be finite or infinite; a finite
generator returns an end-of-file object to indicate that it is exhausted.
For example, <code>read-char</code>, <code>read-line</code>,
and <code>read</code> are generators that
generate characters, lines, and objects from the current input port.
Generators provide lightweight laziness.
</p>
<p>This SRFI also defines procedures that return accumulators.
An accumulator is the inverse of a generator: it is a procedure of one argument
that works as a sink of values.
</p></blockquote></description><dc:creator>Shiro Kawai, John Cowan, and Thomas Gilray</dc:creator><pubDate>Fri, 27 Oct 2017 12:00:00 -0800</pubDate></item><item><title>SRFI 152: String Library (reduced)</title><link>https://srfi.schemers.org/srfi-152/</link><guid>https://srfi.schemers.org/srfi-152</guid><description>SRFI 152 is now in <em>final</em> status.<blockquote> <p>Scheme has an impoverished set of
string-processing utilities, which is a problem for authors of portable
code. This SRFI proposes a coherent and comprehensive set of
string-processing procedures. It is a reduced version of SRFI 13 that has
been aligned with SRFI 135, Immutable Texts. Unlike SRFI 13, it has been
made consistent with the R5RS, R6RS, and R7RS-small string
procedures.</p></blockquote></description><dc:creator>John Cowan</dc:creator><pubDate>Wed, 04 Oct 2017 12:00:00 -0800</pubDate></item><item><title>SRFI 40: A Library of Streams</title><link>https://srfi.schemers.org/srfi-40/</link><guid>https://srfi.schemers.org/srfi-40</guid><description>SRFI 40 is now in <em>withdrawn</em> status.<blockquote> <p>Along with higher-order functions, one of the
hallmarks of functional programming is lazy evaluation. A primary
manifestation of lazy evaluation is lazy lists, generally called streams
by Scheme programmers, where evaluation of a list element is delayed
until its value is needed.
</p><p>The literature on lazy evaluation distinguishes
two styles of laziness, called even and odd. Odd style streams are
ubiquitous among Scheme programs and can be easily encoded with the
Scheme primitives delay and force defined in R5RS. However, the even
style delays evaluation in a manner closer to that of traditional lazy
languages such as Haskell and avoids an "off by one" error that is
symptomatic of the odd style.
</p><p>This SRFI defines the stream data type in the
even style, some essential procedures and syntax that operate on streams,
and motivates our choice of the even style. A companion SRFI 41 Stream
Library provides additional procedures and syntax which make for more
convenient processing of streams and shows several examples of their
use.</p></blockquote></description><dc:creator>Philip L. Bewig</dc:creator><pubDate>Thu, 10 Aug 2017 12:00:00 -0800</pubDate></item><item><title>SRFI 114: Comparators</title><link>https://srfi.schemers.org/srfi-114/</link><guid>https://srfi.schemers.org/srfi-114</guid><description>SRFI 114 is now in <em>withdrawn</em> status.<blockquote> <p>This proposal is a rewrite of <a href="https://srfi.schemers.org/srfi-67/">SRFI 67</a>, Compare Procedures, extending it from procedures
that represent a total order to procedure bundles that represent one or
more of a total order, an equality predicate, and a hash function. By
packaging these procedures together, along with a type test predicate,
they can be treated as a single item for use in the implementation of
data structures.</p></blockquote></description><dc:creator>John Cowan</dc:creator><pubDate>Thu, 10 Aug 2017 12:00:00 -0800</pubDate></item><item><title>SRFI 142: Bitwise Operations</title><link>https://srfi.schemers.org/srfi-142/</link><guid>https://srfi.schemers.org/srfi-142</guid><description>SRFI 142 is now in <em>withdrawn</em> status.<blockquote> <p>This SRFI proposes a coherent and comprehensive
set of procedures for performing bitwise logical operations on integers;
it is accompanied by a reference implementation of the spec in terms of a
set of seven core operators. The sample implementation is portable, as
efficient as practical with pure Scheme arithmetic (it is worthwhile
replacing the core operators with C or assembly language if possible),
and open source.
</p><p>The precise semantics of these operators is
almost never an issue. A consistent, portable set of <em>names</em> and
<em>parameter conventions</em>, however, is. Hence this SRFI, which is
based mainly on <a href="https://srfi.schemers.org/srfi-33/">SRFI 33</a>, with some changes and
additions from <a href="http://srfi.schemers.org/srfi-33/mail-archive/msg00023.html">Olin's late
revisions to SRFI 33</a> (which were never consummated). <a href="https://srfi.schemers.org/srfi-60/">SRFI 60</a> (based on SLIB) is smaller but has a few
procedures of its own; some of its procedures have both native (often
Common Lisp) and SRFI 33 names. They have been incorporated into this
SRFI. <a href="http://www.r6rs.org/final/html/r6rs-lib/r6rs-lib-Z-H-12.html#node_sec_11.4">
R6RS</a> is a subset of SRFI 60, except that all procedure names begin
with a <code>bitwise-</code> prefix. A few procedures have been added from
the general vector <a href="https://srfi.schemers.org/srfi-133/">SRFI 133</a>.
</p><p>Among the applications of bitwise operations
are: hashing, Galois-field calculations of error-detecting and
error-correcting codes, cryptography and ciphers, pseudo-random number
generation, register-transfer-level modeling of digital logic designs,
Fast-Fourier transforms, packing and unpacking numbers in persistent data
structures, space-filling curves with applications to dimension reduction
and sparse multi-dimensional database indexes, and generating approximate
seed values for root-finders and transcendental function
algorithms.</p></blockquote></description><dc:creator>John Cowan</dc:creator><pubDate>Thu, 10 Aug 2017 12:00:00 -0800</pubDate></item><item><title>SRFI 148: Eager syntax-rules</title><link>https://srfi.schemers.org/srfi-148/</link><guid>https://srfi.schemers.org/srfi-148</guid><description>SRFI 148 is now in <em>final</em> status.<blockquote> <p>Writing powerful <code>syntax-rules</code>
macros is hard because they do not compose well: The arguments of a macro
expansion are not expanded. This SRFI defines an easy to comprehend
high-level system for writing powerful, composable (or <em>eager</em>)
macros, two of whose defining features are that its macro arguments are
(in general) eagerly expanded and that it can be portably implemented in
any Scheme implementation conforming to the R7RS.</p></blockquote></description><dc:creator>Marc Nieper-Wißkirchen</dc:creator><pubDate>Tue, 08 Aug 2017 12:00:00 -0800</pubDate></item><item><title>SRFI 144: Flonums</title><link>https://srfi.schemers.org/srfi-144/</link><guid>https://srfi.schemers.org/srfi-144</guid><description>SRFI 144 is now in <em>final</em> status.<blockquote> <p>This SRFI describes numeric procedures
applicable to <em>flonums</em>, a subset of the inexact real numbers
provided by a Scheme implementation. In most Schemes, the flonums and the
inexact reals are the same. These procedures are semantically equivalent
to the corresponding generic procedures, but allow more efficient
implementations.</p></blockquote></description><dc:creator>John Cowan and Will Clinger</dc:creator><pubDate>Mon, 17 Jul 2017 12:00:00 -0800</pubDate></item><item><title>SRFI 151: Bitwise Operations</title><link>https://srfi.schemers.org/srfi-151/</link><guid>https://srfi.schemers.org/srfi-151</guid><description>SRFI 151 is now in <em>final</em> status.<blockquote> <p>This SRFI proposes a coherent and comprehensive
set of procedures for performing bitwise logical operations on integers;
it is accompanied by a reference implementation of the spec in terms of a
set of seven core operators. The sample implementation is portable, as
efficient as practical with pure Scheme arithmetic (it is much more
efficient to replace the core operators with C or assembly language if
possible), and open source.
</p><p>The precise semantics of these operators is
almost never an issue. A consistent, portable set of <em>names</em> and
<em>parameter conventions</em>, however, is. Hence this SRFI, which is
based mainly on <a href="https://srfi.schemers.org/srfi-33/">SRFI 33</a>, with some changes and
additions from <a href="http://srfi.schemers.org/srfi-33/mail-archive/msg00023.html">Olin's late
revisions to SRFI 33</a> (which were never consummated). <a href="https://srfi.schemers.org/srfi-60/">SRFI 60</a> (based on SLIB) is smaller but has a few
procedures of its own; some of its procedures have both native (often
Common Lisp) and SRFI 33 names. They have been incorporated into this
SRFI. <a href="http://www.r6rs.org/final/html/r6rs-lib/r6rs-lib-Z-H-12.html#node_sec_11.4">
R6RS</a> is a subset of SRFI 60, except that all procedure names begin
with a <code>bitwise-</code> prefix. A few procedures have been added from
the general vector <a href="https://srfi.schemers.org/srfi-133/">SRFI 133</a>.
</p><p>Among the applications of bitwise operations
are: hashing, Galois-field calculations of error-detecting and
error-correcting codes, cryptography and ciphers, pseudo-random number
generation, register-transfer-level modeling of digital logic designs,
Fast-Fourier transforms, packing and unpacking numbers in persistent data
structures, space-filling curves with applications to dimension reduction
and sparse multi-dimensional database indexes, and generating approximate
seed values for root-finders and transcendental function
algorithms.
</p><p>This SRFI differs from SRFI 142 in only two
ways:
<ol>
<li>
<p>The <code>bitwise-if</code> function has the
argument ordering of SLIB, SRFI 60, and R6RS rather than the ordering
of SRFI 33.
<li>
<p>The order in which bits are processed by
the procedures listed in the "Bits conversion" section has been
clarified and some of the procedures' names have been changed. See
"Bit processing order" for details.
<ol></ol></p></li></p></li></ol></p></blockquote></description><dc:creator>John Cowan</dc:creator><pubDate>Mon, 10 Jul 2017 12:00:00 -0800</pubDate></item><item><title>SRFI 149: Basic Syntax-rules Template Extensions</title><link>https://srfi.schemers.org/srfi-149/</link><guid>https://srfi.schemers.org/srfi-149</guid><description>SRFI 149 is now in <em>final</em> status.<blockquote> <p>The rules for valid
<code>&lt;template></code>s of <code>&lt;syntax rules></code> are