Article View: comp.lang.modula2
Article #4078Comments on a Neural Net simulator
From: Mark William Hopkins
Date: Wed, 17 Feb 1988 23:43
Date: Wed, 17 Feb 1988 23:43
154 lines
4716 bytes
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
Technical Details
Message-ID:
<4671@uwmcsd1.UUCP>Path:
arc1-ca.pugleaf.net!utzoo!mnetor!uunet!oddjob!hao!ames!pasteur!agate!ig!uwmcsd1!csd4.milw.wisc.edu!markhShow Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!mnetor!uunet!oddjob!hao!ames!pasteur!agate!ig!uwmcsd1!csd4.milw.wisc.edu!markh From: markh@csd4.milw.wisc.edu (Mark William Hopkins) Newsgroups: comp.lang.modula2 Subject: Comments on a Neural Net simulator Message-ID: <4671@uwmcsd1.UUCP> Date: 17 Feb 88 23:43:26 GMT Sender: daemon@uwmcsd1.UUCP Reply-To: markh@csd4.milw.wisc.edu (Mark William Hopkins) Distribution: all Organization: University of Wisconsin-Milwaukee Lines: 154 Summary: More efficient coding. More comments in the future.