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
|
let rec tak (x, y, z) =
if x > y then tak(tak (x-1, y, z), tak (y-1, z, x), tak (z-1, x, y))
else z
let break_handler _ =
print_string "Thank you for pressing ctrl-C."; print_newline();
print_string "Allocating a bit..."; flush stdout;
ignore (tak(18,12,6)); print_string "done."; print_newline()
let stop_handler _ =
print_string "Thank you for pressing ctrl-Z."; print_newline();
print_string "Now raising an exception..."; print_newline();
raise Exit
let _ =
ignore (Sys.signal Sys.sigint (Sys.Signal_handle break_handler));
ignore (Sys.signal Sys.sigtstp (Sys.Signal_handle stop_handler));
begin try
print_string "Computing like crazy..."; print_newline();
for i = 1 to 1000 do ignore (tak(18,12,6)) done;
print_string "Reading on input..."; print_newline();
for i = 1 to 5 do
try
let s = read_line () in
print_string ">> "; print_string s; print_newline()
with Exit ->
print_string "Got Exit, continuing."; print_newline()
done
with Exit ->
print_string "Got Exit, exiting."; print_newline()
end;
exit 0
|