Version 2 (modified by cowan, 7 years ago) (diff)

Cleaned up and clarified

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 constructorcopy-list (SRFI 1)copy-stringcopy-vector (SRFI 43)
Basic predicatelist?string?vector?
Sequence lengthlengthstring-lengthvector-length
Element access?list-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 and for-each groups should be specified to implicitly truncate all sequence arguments to the length of the shortest sequence.