RosettaCodeData/Task/Move-to-front-algorithm/Refal/move-to-front-algorithm.refal
2026-04-30 12:34:36 -04:00

41 lines
773 B
Text

$ENTRY Go {
= <Show 'broood'>
<Show 'bananaaa'>
<Show 'hiphophiphop'>;
};
Alph {
= 'abcdefghijklmnopqrstuvwxyz';
};
Show {
e.X, <Encode (<Alph>) e.X>: e.Enc,
<Decode (<Alph>) e.Enc>: e.X
= <Prout e.X ' -> ' e.Enc ' -> ' e.X>;
e.X = <Prout 'Result of decode not equal to input'>;
};
Encode {
(e.Alph) = ;
(e.Alph) s.C e.X =
<Lookup s.C e.Alph>
<Encode (<MoveToFront s.C e.Alph>) e.X>;
};
Decode {
(e.Alph) = ;
(e.Alph) s.I e.X, <Item s.I e.Alph>: s.C =
s.C <Decode (<MoveToFront s.C e.Alph>) e.X>;
};
Lookup {
s.C e.X s.C e.Y, <Lenw e.X>: s.L e.X = s.L;
};
Item {
s.N e.X, <First <Add 1 s.N> e.X>: (e.Y s.C) e.Z = s.C;
};
MoveToFront {
s.C e.X s.C e.Y = s.C e.X e.Y;
};