wiki:CompleteSequenceCowan
Last modified 16 months ago Last modified on 02/02/2011 03:25:48 PM

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 procedureListsStringsVectors
Basic constructormake-list (SRFI 1)make-stringmake-vector
Variadic constructorliststringvector
Copy constructorlist-copy (SRFI 1)string-copyvector-copy (SRFI 43)
Basic predicatelist?string?vector?
Sequence lengthlengthstring-lengthvector-length
Element accesslist-refstring-refvector-ref
Element mutatorlist-set! (proposed)string-set!vector-set!
Map functionmapstring-map (SRFI 13 extended)vector-map (R6RS)
Map side effectsfor-eachstring-for-each (proposed)vector-for-each (R6RS)
Convert to list---string->listvector->list
Convert to stringlist->string---vector->string (proposed)
Convert to vectorlist->vectorstring->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.