ZPL: an array oriented parallel language

[top]

  1. Array oriented, parallel execution, compiler language.
  2. Example: Take gradient of nearest four neighbours.

    -- Sample ZPL program
    program Grad4nbr;
    
    prototype GetImageSize(infile:file):integer;
    
    config var
    		m	: integer = GetImageSize(zin);
    		n	: integer = GetImageSize(zin);
    		ofname  : string = "output.pnm";
    
    region		IM = [1..n, 1..m];
    var		A, B : [IM] integer;
    
    direction	north = [-1, 0];
    		east  = [ 0, 1];
    		west  = [ 0,-1];
    		south = [ 1, 0];
    
    -- Fake ASCII format of PGM(Portable Gray Map)
    procedure OutImage(outfile:file; var X : [IM] integer);
    begin
    	writeln(outfile, "P2");
    	writeln(outfile, m, " ", n);
    	writeln(outfile, 255);
     [IM]	writeln(outfile, X);
    end;
    
    procedure GetImageSize(infile:file):integer;
    var dim:integer;
    begin
    	read(infile,dim);
    	writeln(zerr, "Read size = ", dim);
    	return dim;
    end;
    
    procedure Grad4nbr();
    var outfile : file;
    begin
    
      [IM]	 	read(zin, A);
      [north of IM]	reflect A;
      [east of IM]	reflect A;
      [west of IM]	reflect A;
      [south of IM]	reflect A;
    
      [IM]		B := 255 - max(max(abs(A - A@north),
    				   abs(A - A@east)),
    			       max(abs(A - A@west),
    				   abs(A - A@south)));
    
    		outfile := open(ofname, "w");
    		OutImage(outfile, B);
    		close(outfile);
    end;
    

[top]