6 Arrays
6.8.1 Printing
On this page:
6.8.1Printing
top
up

6.8ConversionπŸ”— i

syntax

( Listof* A)

Equivalent to (U A(Listof A)(Listof (Listof A))... ) if infinite unions were allowed. This is used as an argument type to list*->array and as the return type of array->list* .

syntax

( Vectorof* A)

Like (Listof* A), but for vectors. See vector*->array and array->vector* .

procedure

( list->array lst)(Array A)

lst:(Listof A)
(list->array dslst)(Array A)
lst:(Listof A)

procedure

( array->list arr)(Listof A)

arr:(Array A)
Convert lists to immutable arrays and back.

The two-argument variant of list->array assumes the elements in lst are in row-major order.

For array->list , if arr has no axes or more than one axis, it is (conceptually) flattened before being converted to a list.

Examples:
> (list->array '(123))

- : #(struct:Array

(Indexes Index (Boxof Boolean) (-> Void) (-> Indexes Positive-Byte))

#<syntax:build/user/8.18/pkgs/math-lib/math/private/array/typed-array-struct.rkt:56:13 prop:equal+hash>

#<syntax:build/user/8.18/pkgs/math-lib/math/private/array/typed-array-struct.rkt:55:13 prop:custom-write>

#<syntax:build/user/8.18/pkgs/math-lib/math/private/array/typed-array-struct.rkt:54:13 prop:custom-print-quotable>)

(array #[1 2 3])

> (list->array '((123)(45)))

- : #(struct:Array

(Indexes

Index

(Boxof Boolean)

(-> Void)

(-> Indexes

(U (List One Positive-Byte Positive-Byte)

(List Positive-Byte Positive-Byte))))

#<syntax:build/user/8.18/pkgs/math-lib/math/private/array/typed-array-struct.rkt:56:13 prop:equal+hash>

#<syntax:build/user/8.18/pkgs/math-lib/math/private/array/typed-array-struct.rkt:55:13 prop:custom-write>

#<syntax:build/user/8.18/pkgs/math-lib/math/private/array/typed-array-struct.rkt:54:13 prop:custom-print-quotable>)

(array #['(1 2 3) '(4 5)])

> (list->array #(22)'(1234))

- : #(struct:Array

(Indexes Index (Boxof Boolean) (-> Void) (-> Indexes Positive-Byte))

#<syntax:build/user/8.18/pkgs/math-lib/math/private/array/typed-array-struct.rkt:56:13 prop:equal+hash>

#<syntax:build/user/8.18/pkgs/math-lib/math/private/array/typed-array-struct.rkt:55:13 prop:custom-write>

#<syntax:build/user/8.18/pkgs/math-lib/math/private/array/typed-array-struct.rkt:54:13 prop:custom-print-quotable>)

(array #[#[1 2] #[3 4]])

> (array->list (array #[123]))

- : (Listof Positive-Byte)

'(1 2 3)

> (array->list (array 10))

- : (Listof Positive-Byte)

'(10)

> (array->list (array #[#[123]#[456]]))

- : (Listof Positive-Byte)

'(1 2 3 4 5 6)

For conversion between nested lists and multidimensional arrays, see list*->array and array->list* . For conversion from flat values to mutable arrays, see vector->array .

The arrays returned by list->array are always strict.

procedure

( vector->array vec)(Mutable-Array A)

vec:(Vectorof A)
vec:(Vectorof A)

procedure

( array->vector arr)(Vectorof A)

arr:(Array A)
Like list->array and array->list , but for vectors.

Examples:
> (vector->array #(123))

- : #(struct:Mutable-Array

(Indexes

Index

(Boxof Boolean)

(-> Void)

(-> Indexes Integer)

(-> Indexes Integer Void)

(Vectorof Integer))

#<syntax:build/user/8.18/pkgs/math-lib/math/private/array/typed-mutable-array.rkt:14:13 prop:custom-write>)

(mutable-array #[1 2 3])

> (vector->array #((123)(45)))

- : #(struct:Mutable-Array

(Indexes

Index

(Boxof Boolean)

(-> Void)

(-> Indexes

(U (List One Positive-Byte Positive-Byte)

(List Positive-Byte Positive-Byte)))

(-> Indexes

(U (List One Positive-Byte Positive-Byte)

(List Positive-Byte Positive-Byte))

Void)

(Vectorof

(U (List One Positive-Byte Positive-Byte)

(List Positive-Byte Positive-Byte))))

#<syntax:build/user/8.18/pkgs/math-lib/math/private/array/typed-mutable-array.rkt:14:13 prop:custom-write>)

(mutable-array #['(1 2 3) '(4 5)])

> (vector->array #(22)#(1234))

- : #(struct:Mutable-Array

(Indexes

Index

(Boxof Boolean)

(-> Void)

(-> Indexes Integer)

(-> Indexes Integer Void)

(Vectorof Integer))

#<syntax:build/user/8.18/pkgs/math-lib/math/private/array/typed-mutable-array.rkt:14:13 prop:custom-write>)

(mutable-array #[#[1 2] #[3 4]])

> (array->vector (array #[123]))

- : (Vectorof Integer)

'#(1 2 3)

- : (Vectorof Integer)

'#(10)

> (array->vector (array #[#[123]#[456]]))

- : (Vectorof Integer)

'#(1 2 3 4 5 6)

For conversion between nested vectors and multidimensional arrays, see vector*->array and array->vector* .

procedure

( list*->array lstspred?)(Array A)

lsts:(Listof* A)
pred?:((Listof* A)-> Any : A)
Converts a nested list of elements of type A to an array. The predicate pred? identifies elements of type A. The shape of lsts must be rectangular.

Examples:
> (list*->array 'singletonsymbol? )

- : #(struct:Array

(Indexes Index (Boxof Boolean) (-> Void) (-> Indexes Symbol))

#<syntax:build/user/8.18/pkgs/math-lib/math/private/array/typed-array-struct.rkt:56:13 prop:equal+hash>

#<syntax:build/user/8.18/pkgs/math-lib/math/private/array/typed-array-struct.rkt:55:13 prop:custom-write>

#<syntax:build/user/8.18/pkgs/math-lib/math/private/array/typed-array-struct.rkt:54:13 prop:custom-print-quotable>)

(array 'singleton)

> (list*->array '(0123)byte? )

- : #(struct:Array

(Indexes Index (Boxof Boolean) (-> Void) (-> Indexes Byte))

#<syntax:build/user/8.18/pkgs/math-lib/math/private/array/typed-array-struct.rkt:56:13 prop:equal+hash>

#<syntax:build/user/8.18/pkgs/math-lib/math/private/array/typed-array-struct.rkt:55:13 prop:custom-write>

#<syntax:build/user/8.18/pkgs/math-lib/math/private/array/typed-array-struct.rkt:54:13 prop:custom-print-quotable>)

(mutable-array #[0 1 2 3])

> (list*->array (list (list (list 5)(list 23))
(list (list 4.0)(list 1.40.29.3)))

- : #(struct:Array

(Indexes

Index

(Boxof Boolean)

(-> Void)

(-> Indexes (Listof Nonnegative-Real)))

#<syntax:build/user/8.18/pkgs/math-lib/math/private/array/typed-array-struct.rkt:56:13 prop:equal+hash>

#<syntax:build/user/8.18/pkgs/math-lib/math/private/array/typed-array-struct.rkt:55:13 prop:custom-write>

#<syntax:build/user/8.18/pkgs/math-lib/math/private/array/typed-array-struct.rkt:54:13 prop:custom-print-quotable>)

(mutable-array #[#['(5) '(2 3)] #['(4.0) '(1.4 0.2 9.3)]])

There is no well-typed Typed Racket function that behaves like list*->array but does not require pred?. Without an element predicate, there is no way to prove to the type checker that list*->array ’s implementation correctly distinguishes elements from rows.

The arrays returned by list*->array are always strict.

procedure

( array->list* arr)(Listof* A)

arr:(Array A)
The inverse of list*->array .

procedure

( vector*->array vecspred?)(Mutable-Array A)

vecs:(Vectorof* A)
pred?:((Vectorof* A)-> Any : A)
Like list*->array , but accepts nested vectors of elements.

Examples:
> (vector*->array 'singletonsymbol? )

- : #(struct:Mutable-Array

(Indexes

Index

(Boxof Boolean)

(-> Void)

(-> Indexes Symbol)

(-> Indexes Symbol Void)

(Vectorof Symbol))

#<syntax:build/user/8.18/pkgs/math-lib/math/private/array/typed-mutable-array.rkt:14:13 prop:custom-write>)

(mutable-array 'singleton)

> ((inst vector*->array Byte)#(0123)byte? )

- : #(struct:Mutable-Array

(Indexes

Index

(Boxof Boolean)

(-> Void)

(-> Indexes Byte)

(-> Indexes Byte Void)

(Vectorof Byte))

#<syntax:build/user/8.18/pkgs/math-lib/math/private/array/typed-mutable-array.rkt:14:13 prop:custom-write>)

(mutable-array #[0 1 2 3])

As in the last example, Typed Racket often needs help inferring vector*->array ’s type parameters.

procedure

( array->vector* arr)(Vectorof* A)

arr:(Array A)
Like array->list* , but produces nested vectors of elements.

procedure

( array-list->array arrs[axis])(Array A)

arrs:(Listof (Array A))
axis:Integer =0
Concatenates arrs along axis axis to form a new array. If the arrays have different shapes, they are broadcast first. The axis number axis must be nonnegative and no greater than the number of axes in the highest dimensional array in arrs.

Examples:

- : #(struct:Array

(Indexes Index (Boxof Boolean) (-> Void) (-> Indexes Byte))

#<syntax:build/user/8.18/pkgs/math-lib/math/private/array/typed-array-struct.rkt:56:13 prop:equal+hash>

#<syntax:build/user/8.18/pkgs/math-lib/math/private/array/typed-array-struct.rkt:55:13 prop:custom-write>

#<syntax:build/user/8.18/pkgs/math-lib/math/private/array/typed-array-struct.rkt:54:13 prop:custom-print-quotable>)

(array #[0 1 2 3])

array-list->array: expected axis Index <= 0; given 1

> (array-list->array (list (array #[0123])(array #['a'b'c'd])))

- : #(struct:Array

(Indexes

Index

(Boxof Boolean)

(-> Void)

(-> Indexes (U 'a 'b 'c 'd Byte)))

#<syntax:build/user/8.18/pkgs/math-lib/math/private/array/typed-array-struct.rkt:56:13 prop:equal+hash>

#<syntax:build/user/8.18/pkgs/math-lib/math/private/array/typed-array-struct.rkt:55:13 prop:custom-write>

#<syntax:build/user/8.18/pkgs/math-lib/math/private/array/typed-array-struct.rkt:54:13 prop:custom-print-quotable>)

(array #[#[0 1 2 3] #['a 'b 'c 'd]])

> (array-list->array (list (array #[0123])(array '!)))

- : #(struct:Array

(Indexes Index (Boxof Boolean) (-> Void) (-> Indexes (U '! Byte)))

#<syntax:build/user/8.18/pkgs/math-lib/math/private/array/typed-array-struct.rkt:56:13 prop:equal+hash>

#<syntax:build/user/8.18/pkgs/math-lib/math/private/array/typed-array-struct.rkt:55:13 prop:custom-write>

#<syntax:build/user/8.18/pkgs/math-lib/math/private/array/typed-array-struct.rkt:54:13 prop:custom-print-quotable>)

(array #[#[0 1 2 3] #['! '! '! '!]])

> (array-list->array (list (array #[0123])(array '!))1)

- : #(struct:Array

(Indexes Index (Boxof Boolean) (-> Void) (-> Indexes (U '! Byte)))

#<syntax:build/user/8.18/pkgs/math-lib/math/private/array/typed-array-struct.rkt:56:13 prop:equal+hash>

#<syntax:build/user/8.18/pkgs/math-lib/math/private/array/typed-array-struct.rkt:55:13 prop:custom-write>

#<syntax:build/user/8.18/pkgs/math-lib/math/private/array/typed-array-struct.rkt:54:13 prop:custom-print-quotable>)

(array #[#[0 '!] #[1 '!] #[2 '!] #[3 '!]])

This function is a left inverse of array->array-list . (It cannot be a right inverse because broadcasting cannot be undone.)

For a similar function that does not increase the dimension of the broadcast arrays, see array-append* .

procedure

( array->array-list arr[axis])(Listof (Array A))

arr:(Array A)
axis:Integer =0
Turns one axis of arr into a list of arrays. Each array in the result has the same shape. The axis number axis must be nonnegative and less than the number of arr’s axes.

Examples:
> (array->array-list (array #[0123]))

- : (Listof

#(struct:Array

(Indexes Index (Boxof Boolean) (-> Void) (-> Indexes Byte))

#<syntax:.../array/typed-array-struct.rkt:56:13 prop:equal+hash>

#<syntax:.../array/typed-array-struct.rkt:55:13 prop:custom-write>

#<syntax:.../array/typed-array-struct.rkt:54:13 prop:custom-print-quotable>))

(list (array 0) (array 1) (array 2) (array 3))

> (array->array-list (array #[#[12]#[1020]]))

- : (Listof

#(struct:Array

(Indexes Index (Boxof Boolean) (-> Void) (-> Indexes Positive-Byte))

#<syntax:.../array/typed-array-struct.rkt:56:13 prop:equal+hash>

#<syntax:.../array/typed-array-struct.rkt:55:13 prop:custom-write>

#<syntax:.../array/typed-array-struct.rkt:54:13 prop:custom-print-quotable>))

(list (array #[1 2]) (array #[10 20]))

> (array->array-list (array #[#[12]#[1020]])1)

- : (Listof

#(struct:Array

(Indexes Index (Boxof Boolean) (-> Void) (-> Indexes Positive-Byte))

#<syntax:.../array/typed-array-struct.rkt:56:13 prop:equal+hash>

#<syntax:.../array/typed-array-struct.rkt:55:13 prop:custom-write>

#<syntax:.../array/typed-array-struct.rkt:54:13 prop:custom-print-quotable>))

(list (array #[1 10]) (array #[2 20]))

array->array-list: expected axis Index < 0; given 0

6.8.1PrintingπŸ”— i

parameter

(array-custom-printer print-array)void?
print-array :
(All (A)((Array A)
(U Boolean 01)-> Any ))
A parameter whose value is used to print subtypes of Array .

procedure

( print-array arrnameportmode)Any

arr:(Array A)
name:Symbol
mode:(U Boolean 01)
Prints an array using array syntax, using name instead of 'array as the head form. This function is set as the value of array-custom-printer when math/array is first required.

Well-behaved Array subtypes do not call this function directly to print themselves. They call the current array-custom-printer :
(array #[0123])
'my-cool-array
#t)

(my-cool-array #[0 1 2 3])

See prop:custom-write for the meaning of the port and mode arguments.

top
up

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /