source: doc/theses/mike_brooks_MMath/programs/hello-array.cfa@ 266732e

Last change on this file since 266732e was dab9fb93, checked in by Michael Brooks <mlbrooks@…>, 21 months ago

Accept Peter's proofreading and adjustment of examples to current syntax

  • Property mode set to 100644
File size: 1.4 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] ) // array bound
11array(bool, N) & f( array(float, N) & a, array(float, N) & b ) {
12 array(bool, N) & ret = *alloc(); // sizeof used by alloc
13 for( i; N ) {
14 ret[i] = 0.005 > 2 * (abs(a[i] - b[i])) / (abs(a[i]) + abs(b[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 int n = ato( argv[1] );
32 array(float, n) a, b; // VLA
33 for ( i; n ) {
34 a[i] = 3.14 / (i + 1);
35 b[i] = a[i] + 0.005 ;
36 }
37 array(bool, n) & result = f( a, b ); // call
38 sout | "result: " | nonl;
39 for ( i; n )
40 sout | result[i] | nonl;
41 sout | nl;
42 free( &result ); // free returned 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
51void fred() {
52 array(float, 10) a;
53 array(float, 20) b;
54 f( a, a );
55 f( b, b );
56 f( a, b );
57}
58
59#ifdef SHOWERR1
60forall( [M], [N] )
61void bad( array(float, M) &a, array(float, N) &b ) {
62 f( a, a ); // ok
63 f( b, b ); // ok
64 f( a, b ); // error
65}
66#endif
67
68
69
70forall( [M], [N] )
71void bad_fixed( array(float, M) & a, array(float, N) & b ) {
72 if ( M == N ) {
73 f( a, (array(float, M) &)b ); // cast b to matching type
74 }
75}
Note: See TracBrowser for help on using the repository browser.