source: doc/theses/mike_brooks_MMath/programs/hello-array.cfa@ 5d300ba

Last change on this file since 5d300ba was 35fc819, checked in by Peter A. Buhr <pabuhr@…>, 5 days ago

more array proofreading

  • Property mode set to 100644
File size: 2.1 KB
Line 
1#include <fstream.hfa>
2#include <stdlib.hfa>
3#include <array.hfa> // learned has to come afer stdlib, which uses the word tag
4
5// Usage:
6// ./a.out 5
7// example does an unchecked reference to argv[1]
8
9
10forall( [@N@] ) $\C{// array dimension}$
11array( bool, @N@ ) & f( array( float, @N@ ) & x, array( float, @N@ ) & y ) {
12 array( bool, @N@ ) & ret = *@alloc@(); $\C{// sizeof ret used by alloc}$
13 for ( i; @N@ ) {
14 ret[i] = 0.005 > 2 * (abs( x[i] - y[i] )) / (abs( x[i]) + abs(y[i] ));
15 }
16 return ret;
17}
18
19
20
21
22
23
24
25
26
27
28// TODO: standardize argv
29
30int main( int argc, char * argv[] ) {
31 const int @dim@ = ato( argv[1] ); $\C{// deduce conversion type}$
32 array( float, @dim@ ) x, y; $\C{// VLAs}$
33 for ( i; dim ) { $\C{// initialize arrays}$
34 x[i] = 3.14 / (i + 1);
35 y[i] = x[i] + 0.005 ;
36 }
37 array( bool, @dim@ ) & result = @f( x, y )@; $\C{// call}$
38 sout | "result: " | nonl; $\C{// print result}$
39 for ( i; dim )
40 sout | result[i] | nonl;
41 sout | nl;
42 free( &result ); $\C{// free result storage}$
43}
44/*
45$\$$ ./a.out 5
46result: true true true false false
47$\$$ ./a.out 7
48result: true true true false false false false
49*/
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64#ifdef SHOWERR1
65
66void fred() {
67
68
69
70 array( float, @10@ ) x;
71 array( float, @20@ ) y;
72 f( x, x ); $\C[0.5in]{// ok}$
73 f( y, y ); $\C{// ok}$
74 f( x, y ); $\C{// error}\CRT$
75
76
77
78
79}
80
81
82
83
84
85
86
87
88
89
90forall( [M], [N] )
91void f( array(float, M) &x, array(float, N) &y ) {
92 f( x, x ); $\C[0.5in]{// ok}$
93 f( y, y ); $\C{// ok}$
94 f( x, y ); $\C{// error}\CRT$
95 if ( M == N ) f( x, @(array( float, M ) &)@y ); $\C{// ok}\CRT$
96}
97#endif
98
99
100
101
102
103
104
105
106
107
108forall( [M], [N] )
109void f( array( float, M ) & x, array( float, N ) & y ) {
110 f( x, x ); $\C[0.5in]{// ok}$
111 f( y, y ); $\C{// ok}$
112 if ( M == N ) f( x, @(array( float, M ) &)@y ); $\C{// ok}\CRT$
113}
114
115
116
117
118
119
120void fred_ok_only() {
121 array( float, @10@ ) x;
122 array( float, @20@ ) y;
123 f( x, x );
124 f( y, y );
125// f( x, y );
126}
127
128
129forall( [M], [N] )
130void bad_ok_only( array(float, M) &x, array(float, N) &y ) {
131 f( x, x );
132 f( y, y );
133
134// f( x, y );
135}
136
137
138// Local Variables: //
139// compile-command: "sed -f sedcmd hello-array.cfa > ../build/tmp.cfa; cfa ../build/tmp.cfa -Wall -Wextra" //
140// End: //
Note: See TracBrowser for help on using the repository browser.