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
Author: 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
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