This file is indexed.

/usr/share/hol88-2.02.19940316/Library/arith/streams.ml is in hol88-library-source 2.02.19940316-31.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
%****************************************************************************%
% FILE          : streams.ml                                                 %
% DESCRIPTION   : Datatype and functions for streams (lazy lists).           %
%                                                                            %
% READS FILES   : <none>                                                     %
% WRITES FILES  : <none>                                                     %
%                                                                            %
% AUTHOR        : R.J.Boulton                                                %
% DATE          : 20th April 1991                                            %
%                                                                            %
% LAST MODIFIED : R.J.Boulton                                                %
% DATE          : 22nd April 1991                                            %
%****************************************************************************%

%----------------------------------------------------------------------------%
% Datatype for lazy lists                                                    %
%----------------------------------------------------------------------------%

rectype * stream = Stream of * # (void -> * stream);;

%----------------------------------------------------------------------------%
% stream_map : (* -> **) -> (void -> * stream) -> (void -> ** stream)        %
%----------------------------------------------------------------------------%

letrec stream_map f s () =
   case s ()
   of (Stream (x,s')) . (Stream (f x,stream_map f s'));;

%----------------------------------------------------------------------------%
% stream_append : (void -> * stream) ->                                      %
%                 (void -> * stream) ->                                      %
%                 (void -> * stream)                                         %
%----------------------------------------------------------------------------%

letrec stream_append s1 s2 () =
   (case s1 ()
    of (Stream (x,s1')) . (Stream (x,stream_append s1' s2)))
   ? s2 ();;

%----------------------------------------------------------------------------%
% stream_flat : (void -> (void -> * stream) stream) -> void -> * stream      %
%----------------------------------------------------------------------------%

letrec stream_flat ss () =
   case ss ()
   of (Stream (s,ss')) . (stream_append s (stream_flat ss') ());;

%----------------------------------------------------------------------------%
% permutations : * list -> void -> * list stream                             %
%----------------------------------------------------------------------------%

letrec permutations l () =
   letrec remove_el n l =
      if ((null l) or (n < 1))
      then failwith `remove_el`
      else if (n = 1)
           then (hd l,tl l)
           else let (x,l') = remove_el (n - 1) (tl l)
                in  (x,(hd l).l')
   in
   let one_smaller_subsets l =
      letrec one_smaller_subsets' l n () =
         if (null l)
         then fail
         else Stream (remove_el n l,one_smaller_subsets' l (n + 1))
      in one_smaller_subsets' l 1
   in
   if (null l) then fail
   if (null (tl l)) then Stream ([hd l],\(). fail)
   else let oss = one_smaller_subsets l
        in  let subperms = stream_map (I # permutations) oss
        in  stream_flat
              (stream_map (\(x,sofl). stream_map (\l. x.l) sofl) subperms) ();;