racket/collects/math/private/array/array-fold.rkt
Neil Toronto cd002d5830 Documented `math/array' folds
Refactored many of the fold functions (e.g. `array-axis-andmap' is gone,
replaced by short-cutting `array-axis-and', which is sufficient because the
result of `array-map' is non-strict; added `array-count', `array-all-fold';
removed `array-all=' and friends)

Turned common folds into macros (preserves return types better, speeds up
compilation time)

Exposed a safe variant of `unsafe-array-axis-reduce'
2012-11-29 15:45:17 -07:00

49 lines
1.4 KiB
Racket

#lang racket/base
(require (for-syntax racket/base)
"typed-array-fold.rkt")
;; ===================================================================================================
;; Standard folds
(define-syntax-rule (define-axis-fold name f)
(define-syntax (name stx)
(syntax-case stx ()
[(_ arr k) (syntax/loc stx (array-axis-fold arr k f))]
[(_ arr k init) (syntax/loc stx (array-axis-fold arr k f init))])))
(define-syntax-rule (define-all-fold name f)
(define-syntax (name stx)
(syntax-case stx ()
[(_ arr) (syntax/loc stx (array-all-fold arr f))]
[(_ arr init) (syntax/loc stx (array-all-fold arr f init))])))
(define-axis-fold array-axis-sum +)
(define-axis-fold array-axis-prod *)
(define-axis-fold array-axis-min min)
(define-axis-fold array-axis-max max)
(define-all-fold array-all-sum +)
(define-all-fold array-all-prod *)
(define-all-fold array-all-min min)
(define-all-fold array-all-max max)
(provide array-axis-fold
array-axis-sum
array-axis-prod
array-axis-min
array-axis-max
array-axis-count
array-axis-and
array-axis-or
array-fold
array-all-fold
array-all-sum
array-all-prod
array-all-min
array-all-max
array-all-and
array-all-or
array-axis-reduce
unsafe-array-axis-reduce)