racket/collects/math/private/matrix/matrix-arithmetic.rkt
Neil Toronto 8d5a069d41 Moar `math/matrix' review/refactoring
* Split "matrix-constructors.rkt" into three parts:
 * "matrix-constructors.rkt"
 * "matrix-conversion.rkt"
 * "matrix-syntax.rkt"

* Made `matrix-map' automatically inline (it's dirt simple)

* Renamed a few things, changed some type signatures

* Fixed error in `matrix-dot' caught by testing (it was broadcasting)

* Rewrote matrix comprehensions in terms of array comprehensions

* Removed `in-column' and `in-row' (can use `in-array', `matrix-col' and
  `matrix-row')

* Tons of new rackunit tests: only "matrix-2d.rkt" and
  "matrix-operations.rkt" are left (though the latter is large)
2012-12-20 17:32:16 -07:00

37 lines
1.2 KiB
Racket

#lang racket/base
(require (for-syntax racket/base)
typed/untyped-utils
(prefix-in typed: "typed-matrix-arithmetic.rkt")
(rename-in "untyped-matrix-arithmetic.rkt"
[matrix-map untyped:matrix-map]))
(define-typed/untyped-identifier matrix-map
typed:matrix-map untyped:matrix-map)
(define-syntax (define/inline-macro stx)
(syntax-case stx ()
[(_ name pat inline-fun typed:fun)
(syntax/loc stx
(define-syntax (name inner-stx)
(syntax-case inner-stx ()
[(_ . pat) (syntax/loc inner-stx (inline-fun . pat))]
[(_ . es) (syntax/loc inner-stx (typed:fun . es))]
[_ (syntax/loc inner-stx typed:fun)])))]))
(define/inline-macro matrix* (a as ...) inline-matrix* typed:matrix*)
(define/inline-macro matrix+ (a as ...) inline-matrix+ typed:matrix+)
(define/inline-macro matrix- (a as ...) inline-matrix- typed:matrix-)
(define/inline-macro matrix-scale (a x) inline-matrix-scale typed:matrix-scale)
(define/inline-macro do-matrix-map (f a as ...) inline-matrix-map matrix-map)
(provide
(rename-out [do-matrix-map matrix-map]
[typed:matrix= matrix=]
[typed:matrix-sum matrix-sum])
matrix*
matrix+
matrix-
matrix-scale)