-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrevyprogram.sml
50 lines (42 loc) · 2.01 KB
/
revyprogram.sml
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
(* Begået hovedsagligt af Troels Henriksen *)
open List;
load "Random";
open Random;
val personer =
["en nørd", "en sekretær", "rektor", "lektor",
"Jyrki", "Pawel", "Hitler", "nogle fysikere", "en rus", "en gammel bitter datalog",
"Stroustrup", "Peter Naur", "en KUAine", "en pige", "WATSON"];
val steder =
["i studieadministrationen", "på rektors kontor", "i kantinen",
"på KUA", "på HCØv", "på Caféen?", "i parken", "på Duniyas",
"på Dilans", "på Oasen?", "hos Leifs", "på pigetoilettet", "til Jeopardy!"];
val emner =
["SML", "SU", "fysik", "patter", "udflytningen", "C", "dårlig kode",
"\"kvinder\"", "humor", "nazister", "Hjemovn"];
val pointer =
["ordspil", "politik", "ordspil", "bitterhed", "ordspil", "kjolemænd",
"ordspil", "social akavethed", "ordspil", "urimelighed", "ordspil", "fagfascisme",
"ordspil", "Windowshad", "ordspil", "drukspil"];
fun vaelgEn l r = nth(l, range (0, length l) r);
fun vaelg l 0 r = ([], l)
| vaelg l n r =
let val elem = vaelgEn l r
val (flere, tabt) = vaelg (filter (fn x => elem <> x) l) (n-1) r
in (elem :: flere, tabt) end;
fun kommaer [] = ""
| kommaer [x] = x
| kommaer [x,y] = x ^ " og " ^ y
| kommaer (x::xs) = x ^ ", " ^ kommaer xs;
fun sketch () = let val r = newgen ()
val (helte, restp) = vaelg personer (range (3,4) r) r
val (harmoni, reste) = vaelg emner (range (3,4) r) r
val (skurke, _) = vaelg restp (range (1,2) r) r
val (konflikt, _) = vaelg reste (range (1,2) r) r
in "Vi ser " ^ (kommaer helte)
^ " der mødes " ^ vaelgEn steder r
^ " for at snakke om " ^ kommaer harmoni
^ ", men så dukker " ^ kommaer skurke
^ " op og råber om " ^ kommaer konflikt ^ ". "
^ "Pointen er " ^ vaelgEn pointer r ^ "."
^ vaelgEn [" Hurtigt tæppefald.", "", ""] r
end;