My main comment on the literals pre-SRFI is that the notation is confusing and hard to read because it's too terse and too full of @ signs, which are large and ugly. Here's my suggestion:
# - required
rank (digits) optional, half the length of the shape list, or if no shape list then 1.
tag (a, u1, u8, s8, ..., c128) mandatory unless both rank and shape are missing (for backward compatibility with Scheme general vectors)
shape - colon followed by a shape list. Optional, assumes lower bound of 0 for all dimensions and upper bound as implied by contents and rank
contents - use to initialize the array
If both rank and shape are present they must agree.
Examples:
#(1 2 3) - general vector with rank 1, tag a, shape (0 2), content (1 2 3)
#a(1 2 3) - same
#s64(1 2 3) - same but long int vector
#2u8((1 2) (3 4)) - byte matrix, shape (0 1 0 1)
#2u16:(1 3 4 6) ((1 2 3) (4 5 6) (7 8 9)): unsigned short matrix with dimensions [1:3, 4:6] so 3 x 3
What do you think of this?
Typo: "verctor" for "vector"