🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: comp.lang.modula2
1 messages
1 total messages Started by Mark William Hopkins Wed, 17 Feb 1988 23:43
Comments on a Neural Net simulator
#4078
Author: Mark William Hopkins
Date: Wed, 17 Feb 1988 23:43
154 lines
4716 bytes
>From wyle@solaris.ifi.ethz.ch@relay.cs.net  (Mitchell Wyle)
>
>Subject: Neural-network simulator "Brain" 
>Keywords: modula-2, connectionist, neural networks, brain, simulator
>Date: 26 Jan 88 10:50:59 GMT
>Organization: SOT sun cluster, ETH Zuerich
>
>This is a neural networks simulator in Modula-2.  It runs on all
>versions of the Sun Modula-2 compiler, but I haven't tried to port 
>it anywhere else.
 ...
 ...  
>Enjoy, and please send comments, corrections, flames, etc to:
>
>wyle@ethz.uucp  (or faster:)  wyle%ifi.ethz.ch@relay.cs.net

There were a lot of hand-coded loops in TestParser. I offer a more compact 
version that does the same thing: 

IMPORTS are all the same ...
VAR declarations remain the same except for the addition of

Accum : CARDINAL;

The two WHILE loops for converting back and forth between bit strings and 
ascii code can probably be joined into one, with a FOR k := 1 to 2 loop.

BEGIN
  Open   (source, 'Brain.txt', textMode, readOnly,  state);
  Open   (test  , 'Brain.tst', textMode, readOnly,  state);
  Create (log   , 'Brain.log', textMode, replace ,  state);
  Open   (log   , 'Brain.log', textMode, readWrite, state);
  Create (out   , 'Brain.out', textMode, replace ,  state);
  Open   (out   , 'Brain.out', textMode, readWrite, state);

  InitParser (source, log);
  Parse;
  CloseParser;

  Activity (500,500);

  ReadString (test, I, state); ReadLn (test, state);
  WriteString (log, I, state); WriteLn (log, state);
  WHILE (I[0] <> '.') DO
     FOR i := 0 TO 8 DO               
        Accum := ORD(I[i]);
        I[i] := 0C;
	FOR j := 7 TO 0 BY (-1) DO
	   Ib[i*8 + j] := 800*(Accum MOD 2); (*** Convert I ***)
	   Accum := Accum DIV 2              (*** to a binary word Ib ***)
        END
     END

     Input (Ib, 72); Tick; Output (Ob, 48);
      
     FOR i := 0 TO 5 DO
        Accum := 0;                
        FOR j := 7 TO 0 BY (-1) DO
           Accum := Accum * 2;
	   IF Ob[i*8 + j] > 0 THEN
	      Accum := Accum + 1;
              WriteChar(log,'1',state)       (*** Convert binary word Ob ***)
           ELSE                              (*** to a character O ***)
	      WriteChar(log,'0',state)
           END;
        END;
	
	IF NOT(Accum IN {ORD('A')..ORD('Z')}) THEN 
           O[i] := '.' 
        ELSE
           O[i] := CHR(Accum)
        END;
	WriteChar (log,',', state)
     END; 
     
     WriteChar (log,' ', state);
     
     FOR i := 0 TO 5 DO 
        WriteChar (log, O[i], state) 
     END;
     
     WriteLn (log, state);
     ReadString(test, I, state); ReadLn(test,state);
     WriteString(log, I, state); WriteLn(log, state)
  END; 
  
  teaching := FALSE;
  WriteLn (log, state);
  WriteLn (log, state);

  ReadString (test, I, state); ReadLn (test, state);
  WriteString (log, I, state); WriteLn (log, state);
    
  WHILE (I[0] <> '.') DO
        
     FOR i := 0 TO 2 DO
	Accum := ORD(I[i]);
	I[i] := 0C;
	FOR j := 7 TO 0 BY (-1) DO
           Ib[i*i + j] := 800*(Accum MOD 2);
	   Accum := Accum DIV 2
        END
     END;

     FOR i := 3 TO 8 DO
        I[i] := 0C;
        FOR j := 0 TO 7 DO
	   Ib[i*8 + j] := 0
	END
     END;
        
     Input (Ib, 72); Tick; Output (Ob, 48);
        
     FOR i := 0 TO 5 DO
        Accum := 0;
        FOR j := 7 TO 0 BY (-1) DO
           Accum := Accum * 2;
           IF Ob[i*8 + j] > 0 THEN
              Accum := Accum + 1;
	      WriteChar(log,'1',state)
           ELSE
	      WriteChar(log,'0',state)
           END;
        END;
	   
	IF NOT( Accum IN {ORD('A')..ORD('Z')} ) THEN 
	   O[i] := '.' 
	ELSE
	   O[i] := CHR(Accum)
	END;
        
        WriteChar (log,',', state)
     
     END; 
     WriteChar (log,' ', state);
    
     FOR i := 0 TO 5 DO 
        WriteChar (log, O[i], state) 
     END;
      
     WriteLn (log, state)
     ReadString(test, I, state); ReadLn(test, state);
     WriteString(log, I, state); WriteLn(log, state)
  END;

  Save(out);
  
  Close(source, state);
  Close(test  , state);
  Close(log   , state);
  Close(out   , state)
END TestParser.
SHAR_EOF
fi
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads