RosettaCodeData/Task/Ordered-words/Refal/ordered-words.refal
2026-04-30 12:34:36 -04:00

58 lines
1.1 KiB
Text

$ENTRY Go {
, <ReadFile 1 'unixdict.txt'>: e.Dict
, <Select (Ordered) e.Dict>: e.Ordered
, <Reduce (Max) <Each (Length) e.Ordered>>: s.MaxLength
, <Select (IsLength s.MaxLength) e.Ordered>: e.LongestOrdered
= <Each (Prout) e.LongestOrdered>;
};
ReadFile {
s.Chan e.File =
<Open 'r' s.Chan e.File>
<ReadFile (s.Chan)>;
(s.Chan), <Get s.Chan>: {
0 = <Close s.Chan>;
e.Line = (e.Line) <ReadFile (s.Chan)>;
};
};
Reduce {
(e.F) t.1 = t.1;
(e.F) t.1 e.2 = <Mu e.F t.1 <Reduce (e.F) e.2>>;
};
Max {
s.1 s.2, <Compare s.1 s.2>: {
'+' = s.1;
e.X = s.2;
};
};
Each {
(e.F) = ;
(e.F) (e.1) e.2 = <Mu e.F e.1> <Each (e.F) e.2>;
};
Select {
(e.F) = ;
(e.F) (e.1) e.2, <Mu e.F e.1>: {
True = (e.1) <Select (e.F) e.2>;
False = <Select (e.F) e.2>;
};
};
Ordered {
s.1 = True;
s.1 s.2 e.3, <Compare <Ord s.1> <Ord s.2>>: {
'+' = False;
s.4 = <Ordered s.2 e.3>;
};
e.1 = False;
};
IsLength {
s.Len e.1, <Lenw e.1>: s.Len e.1 = True;
s.Len e.1 = False;
};
Length { e.1, <Lenw e.1>: s.Len e.1 = s.Len; };