File: array-pointwise.rkt

package info (click to toggle)
racket 7.2%2Bdfsg1-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 125,432 kB
  • sloc: ansic: 258,980; pascal: 59,975; sh: 33,650; asm: 13,558; lisp: 7,124; makefile: 3,329; cpp: 2,889; exp: 499; python: 274; xml: 11
file content (94 lines) | stat: -rw-r--r-- 2,491 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#lang racket/base

(require typed/untyped-utils
         racket/math
         (rename-in "typed-array-pointwise.rkt"
                    [array-map  typed:array-map])
         (rename-in "untyped-array-pointwise.rkt"
                    [array-map  untyped:array-map]))

(define-typed/untyped-identifier array-map
  typed:array-map untyped:array-map)

(define-syntax-rule (define-array-op1 name op)
  (define-syntax-rule (name arr) (array-map op arr)))

(define-syntax-rule (define-array-op2 name op)
  (define-syntax-rule (name arr0 arr1) (array-map op arr0 arr1)))

(define-syntax-rule (define-array-op1+ name op)
  (define-syntax-rule (name arr0 arrs (... ...)) (array-map op arr0 arrs (... ...))))

(define-syntax-rule (define-array-op2+ name op)
  (define-syntax-rule (name arr0 arr1 arrs (... ...)) (array-map op arr0 arr1 arrs (... ...))))

(define-syntax-rule (define-array-op name op)
  (define-syntax-rule (name arrs (... ...)) (array-map op arrs (... ...))))

(define-syntax-rule (array-scale arr x-expr)
  (let ([x x-expr])
    (inline-array-map (λ (y) (* x y)) arr)))

(define-array-op1 array-sqr sqr)
(define-array-op1 array-sqrt sqrt)
(define-array-op1 array-abs abs)
(define-array-op1 array-magnitude magnitude)
(define-array-op1 array-angle angle)
(define-array-op1 array-conjugate conjugate)
(define-array-op1 array-real-part real-part)
(define-array-op1 array-imag-part imag-part)

(define-array-op2 array-make-rectangular make-rectangular)
(define-array-op2 array-make-polar make-polar)

(define-array-op array+ +)
(define-array-op array* *)
(define-array-op1+ array- -)
(define-array-op1+ array/ /)

(define-array-op1+ array-min min)
(define-array-op1+ array-max max)

(define-array-op2+ array< <)
(define-array-op2+ array<= <=)
(define-array-op2+ array> >)
(define-array-op2+ array>= >=)
(define-array-op2+ array= =)

(define-array-op2 array-not not)

(define-syntax-rule (array-and arrs ...) (inline-array-map and arrs ...))
(define-syntax-rule (array-or arrs ...) (inline-array-map or arrs ...))
(define-syntax-rule (array-if arr0 arr1 arr2) (inline-array-map if arr0 arr1 arr2))

(provide
 ;; Mapping
 inline-array-map
 array-map
 ;; Lifted operators
 array-scale
 array-sqr
 array-sqrt
 array-abs
 array-magnitude
 array-angle
 array-conjugate
 array-real-part
 array-imag-part
 array-make-rectangular
 array-make-polar
 array+
 array-
 array*
 array/
 array-min
 array-max     
 array=
 array<
 array<=
 array>
 array>=
 array-not
 array-and
 array-or
 array-if)