This site is a static rendering of the Trac instance that was used by R7RS-WG1 for its work on R7RS-small (PDF), which was ratified in 2013. For more information, see Home. For a version of this page that may be more recent, see CompleteSequenceCowan in WG2's repo for R7RS-large.

Complete­Sequence­Cowan

cowan
2010-09-20 00:40:08
6history
source

The WG1 charter says "Self consistency is an important objective, which may require adding new features." Scheme has three sequence types: lists, strings, and vectors, but the support for them is not consistent. Lists have the most support, strings and vectors have much less, and inconsistently so. I propose providing the following procedures, some of which are R5RS, some R6RS, some in various SRFIs, and some new:

Type of procedure

Lists

Strings

Vectors

Basic constructor

make-list (SRFI 1)

make-string

make-vector

Variadic constructor

list

string

vector

Copy constructor

copy-list (SRFI 1)

copy-string

copy-vector (SRFI 43)

Basic predicate

list?

string?

vector?

Sequence length

length

string-length

vector-length

Element access

list-ref

string-ref

vector-ref

Element mutator

list-set! (proposed)

string-set!

vector-set!

Map function

map

string-map (SRFI 13 extended)

vector-map (R6RS)

Map side effects

for-each

string-for-each (proposed)

vector-for-each (R6RS)

Convert to list

---

string->list

vector->list

Convert to string

list->string

---

vector->string (proposed)

Convert to vector

list->vector

string->vector (proposed)

---

In summary: 33 procedures, 23 in R5RS, 2 in R6RS, 2 in SRFI 1, 1 in SRFI 43, 1 in SRFI-13 but extended to take multiple strings, 4 novel but obvious.

I further propose that the "map function" and "map side effects" groups should be specified to implicitly truncate all sequence arguments to the length of the shortest sequence.