
* Finally added `array-axis-expand' as a dual for `array-axis-reduce' in order to implement `vandermonde-matrix' elegantly * Better, shorter matrix multiply; reworked all matrix arithmetic * Split "matrix-operations.rkt" into at least 5 parts: * "matrix-operations.rkt" * "matrix-basic.rkt" * "matrix-comprehension.rkt" * "matrix-sequences.rkt" * "matrix-column.rkt" Added "matrix-constructors.rkt" Added `matrix', `row-matrix', and `col-matrix' macros A lot of other little changes Currently, `in-row' and `in-column' are broken. I intend to implement them in a way that makes them work in untyped and Typed Racket.
35 lines
1.0 KiB
Racket
35 lines
1.0 KiB
Racket
#lang racket/base
|
|
|
|
(require typed/untyped-utils
|
|
typed/racket/base
|
|
(for-syntax racket/base syntax/parse)
|
|
"array-syntax.rkt"
|
|
(except-in "typed-mutable-array.rkt"
|
|
vector->array))
|
|
|
|
(require/untyped-contract
|
|
(begin (require "typed-mutable-array.rkt"))
|
|
"typed-mutable-array.rkt"
|
|
[vector->array (All (A) (case-> ((Vectorof A) -> (Mutable-Array A))
|
|
((Vectorof Integer) (Vectorof A) -> (Mutable-Array A))))])
|
|
|
|
(provide
|
|
;; Mutable-Array
|
|
Mutable-Array
|
|
mutable-array?
|
|
mutable-array-data
|
|
vector->array
|
|
unsafe-vector->array
|
|
mutable-array-copy
|
|
mutable-array
|
|
;; Conversion
|
|
array->mutable-array)
|
|
|
|
(define-syntax (mutable-array stx)
|
|
(syntax-parse stx #:literals (:)
|
|
[(_ e:expr)
|
|
(syntax/loc stx (array/syntax mutable-array vector unsafe-vector->array e))]
|
|
[(_ e:expr : T:expr)
|
|
(syntax/loc stx (array/syntax mutable-array (inst vector T) unsafe-vector->array e))]
|
|
[_:id (raise-syntax-error 'mutable-array "not allowed as an expression" stx)]))
|