45 lines
743 B
Plaintext
45 lines
743 B
Plaintext
$ENTRY Go {
|
|
, <Print <Example>>: e.In
|
|
, <Print <RLEncode e.In>>: e.Enc
|
|
= <Prout <RLDecode e.Enc>>;
|
|
};
|
|
|
|
Example {
|
|
= 'WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW';
|
|
};
|
|
|
|
RLEncode {
|
|
e.X = <Each (Count) <Chunk e.X>>;
|
|
};
|
|
|
|
RLDecode {
|
|
e.X = <Concat <Each (Repeat) e.X>>;
|
|
};
|
|
|
|
Count {
|
|
e.X, <Lenw e.X>: s.L s.C e.Y = s.L s.C;
|
|
};
|
|
|
|
Repeat {
|
|
0 s.C = ;
|
|
s.N s.C = s.C <Repeat <Sub s.N 1> s.C>;
|
|
};
|
|
|
|
Each {
|
|
(e.F) = ;
|
|
(e.F) (e.X) e.Y = (<Mu e.F e.X>) <Each (e.F) e.Y>;
|
|
};
|
|
|
|
Chunk {
|
|
= ;
|
|
(e.I) = (e.I);
|
|
(e.I t.I) t.I e.X = <Chunk (e.I t.I t.I) e.X>;
|
|
(e.I) t.J e.X = (e.I) <Chunk (t.J) e.X>;
|
|
t.I e.X = <Chunk (t.I) e.X>;
|
|
};
|
|
|
|
Concat {
|
|
= ;
|
|
(e.X) e.Y = e.X <Concat e.Y>;
|
|
};
|