annotate interps/egel/prelude-hackeso.eg @ 12312:ab575fb7f10e draft

<b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
author HackEso <hackeso@esolangs.org>
date Thu, 20 Feb 2020 23:23:38 +0000
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12312
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
1 import "/hackenv/interps/egel/io.ego"
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
2 import "/hackenv/interps/egel/fs.ego"
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
3 import "/hackenv/interps/egel/random.ego"
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
4 import "/hackenv/interps/egel/regex.ego"
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
5
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
6 namespace System (
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
7
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
8 def or =
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
9 [ false false -> false
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
10 | X Y -> true ]
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
11
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
12 def and =
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
13 [ true true -> true
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
14 | X Y -> false ]
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
15
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
16 def not =
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
17 [ true -> false
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
18 | X -> true ]
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
19
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
20 def . =
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
21 [ F G X -> F (G X) ]
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
22
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
23 def flip = [ F X Y -> F Y X ]
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
24
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
25 def uncurry = [ F (X,Y) -> F X Y ]
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
26
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
27 def fst = [ (X,Y) -> X ]
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
28
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
29 def snd = [ (X,Y) -> Y ]
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
30
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
31 def @@ =
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
32 [ SELF NAME -> (get NAME SELF) SELF ]
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
33
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
34 )
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
35
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
36 namespace Opt (
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
37 data just
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
38 data nothing
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
39 )
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
40
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
41 namespace List (
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
42
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
43 using System
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
44
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
45 # renamed from length to avoid collision with String:length
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
46 def len =
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
47 [ nil -> 0
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
48 | (cons X XX) -> 1 + (len XX) ]
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
49
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
50 def foldl =
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
51 [ F Z nil -> Z
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
52 | F Z (cons X XX) -> foldl F (F Z X) XX ]
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
53
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
54 def foldr =
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
55 [ F Z nil -> Z
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
56 | F Z (cons X XX) -> F X (foldr F Z XX) ]
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
57
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
58 def head =
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
59 [ (cons X XX) -> X ]
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
60
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
61 def tail =
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
62 [ (cons X XX) -> XX ]
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
63
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
64 def ++ =
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
65 [ nil YY -> YY
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
66 | (cons X XX) YY -> cons X (XX ++ YY) ]
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
67
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
68 def map =
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
69 [ F nil -> nil
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
70 | F (cons X XX) -> let Y = F X in cons Y (map F XX) ]
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
71
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
72 def reverse =
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
73 foldl (flip cons) nil
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
74
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
75 def block =
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
76 [ 0 -> nil
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
77 | N -> cons (N - 1) (block (N - 1)) ]
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
78
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
79 def nth =
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
80 [ 0 (cons X XX) -> X
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
81 | N (cons X XX) -> nth (N - 1) XX ]
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
82
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
83 def insert =
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
84 [ 0 X (cons Y YY) -> cons X YY
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
85 | I X (cons Y YY) -> cons Y (insert (I - 1) X YY) ]
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
86
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
87 def take =
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
88 [ 0 XX -> nil
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
89 | N (cons X XX) -> cons X (take (N - 1) XX) ]
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
90
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
91 def drop =
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
92 [ 0 XX -> XX
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
93 | N (cons X XX) -> drop (N - 1) XX ]
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
94
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
95 def fromto =
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
96 [ X Y ->
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
97 if X <= Y then cons X (fromto (X+1) Y)
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
98 else nil ]
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
99
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
100 def filter =
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
101 [ P nil -> nil
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
102 | P (cons X XX) -> if P X then cons X (filter P XX)
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
103 else filter P XX ]
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
104
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
105 def flatten =
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
106 [ nil -> nil
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
107 | (cons nil YY) -> flatten YY
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
108 | (cons (cons X XX) YY) -> cons X (flatten (cons XX YY)) ]
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
109
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
110 def zip =
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
111 [ (cons X XX) (cons Y YY) -> cons (X,Y) (zip XX YY)
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
112 | XX YY -> nil ]
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
113
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
114 def zipwith =
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
115 [ Z (cons X XX) (cons Y YY) -> cons (Z X Y) (zipwith Z XX YY)
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
116 | Z XX YY -> nil ]
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
117
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
118 def any =
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
119 [ P nil -> false
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
120 | P (cons B BB) -> if P B then true else any P BB ]
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
121
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
122 def all =
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
123 [ P nil -> true
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
124 | P (cons B BB) -> if P B then all P BB else false ]
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
125
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
126 def elem =
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
127 [ X -> any ((==) X) ]
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
128
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
129 def notelem =
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
130 [ X -> all ((/=) X) ]
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
131
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
132 def union =
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
133 [ nil YY -> YY
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
134 | (cons X XX) YY -> if elem X YY then union XX YY else cons X (union XX YY) ]
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
135
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
136 def insertEverywhere =
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
137 [ X nil -> {{X}}
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
138 | X (cons Y YY) -> cons (cons X (cons Y YY)) (map (cons Y) (insertEverywhere X YY)) ]
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
139
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
140 def concatMap =
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
141 [ F -> foldr ((++) . F) nil ]
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
142
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
143 def permutations =
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
144 foldr (concatMap . insertEverywhere) {{}}
ab575fb7f10e <b_jonas> `` cp -vi /hackenv/tmp/egel-master/include/prelude-hackeso.eg /hackenv/interps/egel/
HackEso <hackeso@esolangs.org>
parents:
diff changeset
145 )