-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAOPA.lss
94 lines (86 loc) · 3.25 KB
/
AOPA.lss
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
<h1>AOPA - Apply Infix Operator to Array</h1>
[[AOPA(A1,OP,A2)]] will apply the infix operator [[OP]] to
corresponding pairs of [[A1]] and [[A2]], returning an array unless
both are scalars.
For example, [[AOPA(A,'+',1)]] will add [[1]] to each element of [[A]].
[[AOPA()]] has four cases: array operation array, array operation
scalar, scalar operation array, and finally scalar operation scalar.
<h2>Uses</h2>
<a href="SEQ.html">SEQ</a><br>
<<INCLUDES>>=
-INCLUDE 'SEQ.INC'
@
<<AOPA>>=
-PUBLIC AOPA()
*
DEFINE('AOPA(A1,OP,A2)S1,I,S2,S') :(AOPA_END)
*
AOPA IDENT(DATATYPE(A1), 'ARRAY') :S(AOPA_1)
IDENT(DATATYPE(A2), 'ARRAY') :S(AOPA_2)
AOPA = EVAL('A1 ' OP ' A2') :(RETURN)
AOPA_1 S1 = '<I>'
S2 = IDENT(DATATYPE(A2), 'ARRAY') '<I>'
AOPA = ARRAY(PROTOTYPE(A1)) :(AOPA_COMMON)
AOPA_2 S2 = '<I>'
AOPA = ARRAY(PROTOTYPE(A2))
AOPA_COMMON
S = ' AOPA<I> = A1' S1 ' ' OP ' A2' S2
SEQ(S, .I) :(RETURN)
*
AOPA_END
@
<<unit_test>>=
#!/usr/bin/bash
exec "snobol4" "-b" "$0" "$@"
-INCLUDE 'AOPA.INC'
-INCLUDE 'CRACK.INC'
&CODE = 1
A = %'1,2,3'
B = %'10,20,30'
* ARRAY OPERATION ARRAY
C = AOPA(A, '+', B)
EQ(C<1>, 11) :F(END)
EQ(C<2>, 22) :F(END)
EQ(C<3>, 33) :F(END)
* ARRAY OPERATION SCALAR
C = AOPA(A, '-', 1)
EQ(C<1>, 0) :F(END)
EQ(C<2>, 1) :F(END)
EQ(C<3>, 2) :F(END)
* SCALAR OPERATION SCALAR
C = AOPA(3, '*', B)
EQ(C<1>, 30) :F(END)
EQ(C<2>, 60) :F(END)
EQ(C<3>, 90) :F(END)
* SCALAR OPERATION SCALAR
EQ(AOPA(6, '/', 3), 2) :F(END)
&CODE = 0
END
@
<<>>=
-MODULE AOPA
<<INCLUDES>>
-IN72
-STITL AOPA
-EJECT
*
************************************************************************
* *
* # ####### ###### # *
* # # # # # # # # *
* # # # # # # # # *
* # # # # ###### # # *
* ####### # # # ####### *
* # # # # # # # *
* # # ####### # # # *
* *
* AOPA APPLY OPERATOR TO ARRAY *
* *
************************************************************************
*
* AOPA.lss
*
<<AOPA>>
*
* CE: .MSNOBOL4;
@