From 51a532ce591f23ef01b700d3ac42843f626b1005 Mon Sep 17 00:00:00 2001 From: Fardale Date: Sat, 25 Jan 2020 00:35:13 +0100 Subject: [PATCH] examples: clean up --- examples/bencode_write.ml | 22 ----------- examples/cgi/web_pwd.ml | 26 ------------ examples/collatz.ml | 20 ---------- examples/crawl.ml | 83 --------------------------------------- examples/dune | 11 ++++-- examples/lambda.ml | 4 +- examples/mem_size.ml | 67 ------------------------------- 7 files changed, 10 insertions(+), 223 deletions(-) delete mode 100644 examples/bencode_write.ml delete mode 100644 examples/cgi/web_pwd.ml delete mode 100644 examples/collatz.ml delete mode 100644 examples/crawl.ml delete mode 100644 examples/mem_size.ml diff --git a/examples/bencode_write.ml b/examples/bencode_write.ml deleted file mode 100644 index 13196a42..00000000 --- a/examples/bencode_write.ml +++ /dev/null @@ -1,22 +0,0 @@ - -(** Write 10_000 Bencode values on the given file *) - -(* write n times the same value in the file *) -let write_values file n = - let out = BencodeOnDisk.open_out file in - Printf.printf "[%d] opened file\n" (Unix.getpid ()); - let v = Bencode.(L [I 0; I 1; S "foo"]) in - for i = 0 to n-1 do - Printf.printf "[%d] iteration %d\n" (Unix.getpid ()) i; - flush stdout; - BencodeOnDisk.write out v; - done; - BencodeOnDisk.close_out out; - Printf.printf "done\n"; - () - -let _ = - let file = Sys.argv.(1) in - Printf.printf "[%d] start: write to %s\n" (Unix.getpid ()) file; - flush stdout; - write_values file 100 diff --git a/examples/cgi/web_pwd.ml b/examples/cgi/web_pwd.ml deleted file mode 100644 index 649dc4f1..00000000 --- a/examples/cgi/web_pwd.ml +++ /dev/null @@ -1,26 +0,0 @@ - -(** Export the list of files in a directory *) - -let dir = "/tmp/" - -(* list of files in a dir *) -let lsdir dir = - let d = Unix.opendir dir in - let l = ref [] in - begin try while true do - l := Unix.readdir d :: !l - done with End_of_file -> Unix.closedir d - end; - !l - -let export dir = - let l = lsdir dir in - ToWeb.HTML.(concat - [ h1 (str ("files in "^ dir)) - ; list (List.map str l) - ]) - -let state = ToWeb.State.create dir ~export - -let _ = - ToWeb.serve_state ~sockfile:"/tmp/foo.sock" state diff --git a/examples/collatz.ml b/examples/collatz.ml deleted file mode 100644 index c458c27d..00000000 --- a/examples/collatz.ml +++ /dev/null @@ -1,20 +0,0 @@ - -(** Display the graph of the collatz conjecture, starting from the given int *) - -let g = LazyGraph.map - ~edges:(fun () -> []) - ~vertices:(fun i -> [`Label (string_of_int i)]) - LazyGraph.collatz_graph - -let collatz n filename = - Format.printf "print graph to %s@." filename; - let out = open_out filename in - let fmt = Format.formatter_of_out_channel out in - LazyGraph.Dot.pp ~name:"collatz" g fmt (Sequence.singleton n); - Format.pp_print_flush fmt (); - close_out out - -let _ = - if Array.length Sys.argv < 3 - then (Format.printf "use: collatz num file@."; exit 0) - else collatz (int_of_string Sys.argv.(1)) Sys.argv.(2) diff --git a/examples/crawl.ml b/examples/crawl.ml deleted file mode 100644 index 8d43f98f..00000000 --- a/examples/crawl.ml +++ /dev/null @@ -1,83 +0,0 @@ - -(** Crawl the web to find shortest path between two urls *) - -open Batteries - -let pool = Future.Pool.create ~timeout:15. ~size:50 - -let split_lines s = String.nsplit s ~by:"\n" - -let get_and_parse url = - let cmd = Format.sprintf "wget -q '%s' -O - | grep -o 'http\\(s\\)\\?://[^ \"]\\+'" url in - let content = Future.spawn_process ?stdin:None ~pool ~cmd in - content - |> Future.map (fun (_, stdout, _) -> stdout) - |> Future.map split_lines - |> Batteries.tap (fun lines -> - Future.on_success lines (fun lines -> Format.printf "downloaded %s (%d urls)@." url (List.length lines))) - -type page = string * (string list Future.t) - -(** The web graph; its vertices are annotated by futures of the content *) -let g : (page, string, unit) LazyGraph.t = - let force (url, future) = - Format.printf "force %s@." url; - let urls = - try Future.get future |> List.map (fun url -> (), (url, get_and_parse url)) - with e -> [] in - let edges = Gen.of_list urls in - (* need to parse the page to get the urls *) - LazyGraph.Node ((url, future), url, edges) - in LazyGraph.make - ~eq:(fun (url1,_) (url2,_) -> url1 = url2) - ~hash:(fun (url,_) -> Hashtbl.hash url) - force - -let pp_path fmt path = - List.print ~sep:"\n" - (fun fmt ((u1,_), (), (u2,_)) -> - String.print fmt u1; String.print fmt " -> "; String.print fmt u2) - fmt path - -(* seek a path from the first url to the second *) -let path_between from into = - Format.printf "seek path from %s to %s@." from into; - let on_explore (url,_) = Format.printf " explore %s...@." url in - try - let cost, path = LazyGraph.dijkstra ~on_explore g - (from, get_and_parse from) (into, get_and_parse into) in - Printf.printf "found path (cost %f):\n%a\n" cost pp_path path - with Not_found -> - Format.printf "no path could be found@." - -let print_limit file start depth = - Format.printf "print into %s webgraph starting from %s, up to depth %d@." - file start depth; - let start = start, get_and_parse start in - let g' = LazyGraph.limit_depth g depth (Gen.singleton start) in - let g'' = LazyGraph.map ~vertices:(fun v -> [`Label v]) ~edges:(fun _ -> []) g' in - let out = Format.formatter_of_out_channel (open_out file) in - LazyGraph.Dot.pp ~name:"web" g'' out (Gen.singleton start); - Format.pp_print_flush out (); - () - -let _ = - let timer = Future.Timer.create () in - let rec ping () = - Format.printf "*** ping! (size of pool: %d)@." (Future.Pool.size pool); - Future.Timer.schedule_in timer 10. ping - in ping () - -let print_usage () = - Format.printf "usage: crawl path url1 url2@."; - Format.printf "usage: crawl print file url depth@."; - () - -let _ = - match Sys.argv with - | [|_; "print"; file; url; depth|] -> - print_limit file url (int_of_string depth) - | [|_; "path"; from; into|] -> - path_between from into - | _ -> - print_usage () diff --git a/examples/dune b/examples/dune index 23a68421..1cdf32ab 100644 --- a/examples/dune +++ b/examples/dune @@ -1,10 +1,15 @@ -(executables - (names id_sexp) +(executable + (name id_sexp) (libraries containers.sexp) + (modules id_sexp) (flags :standard -w +a-4-42-44-48-50-58-32-60@8 -safe-string -color always) (ocamlopt_flags :standard -O3 -color always -unbox-closures -unbox-closures-factor 20) ) - +(executable + (name lambda) + (libraries printbox) + (modules lambda) + ) diff --git a/examples/lambda.ml b/examples/lambda.ml index d03a2fa3..03fd6bfe 100644 --- a/examples/lambda.ml +++ b/examples/lambda.ml @@ -28,7 +28,7 @@ let rec fvars t = match t with let rec replace t ~var ~by = match t with | Var s -> if s=var then by else t | App (t1,t2) -> App (replace t1 ~var ~by, replace t2 ~var ~by) - | Lambda (v, t') when v=var -> t (* no risk *) + | Lambda (v, _t') when v=var -> t (* no risk *) | Lambda (v, t') -> Lambda (v, replace t' ~var ~by) (* rename [t] so that [var] doesn't occur in it *) @@ -109,4 +109,4 @@ let print_reduction t = let () = Random.self_init (); let t = _random_term (5 + Random.int 20) [] in - PrintBox.output ~indent:2 stdout (print_reduction t) + PrintBox_text.output ~indent:2 stdout (print_reduction t) diff --git a/examples/mem_size.ml b/examples/mem_size.ml deleted file mode 100644 index 4e69c083..00000000 --- a/examples/mem_size.ml +++ /dev/null @@ -1,67 +0,0 @@ -(** Compute the memory footprint of a value (and its subvalues). Reference is - http://rwmj.wordpress.com/2009/08/05/ocaml-internals-part-2-strings-and-other-types/ *) - - - -(** A graph vertex is an Obj.t value *) -let graph = - let force x = - if Obj.is_block x - then - let children = Sequence.map (fun i -> i, Obj.field x i) (0--(Obj.size x - 1)) in - LazyGraph.Node (x, Obj.tag x, children) - else - LazyGraph.Node (x, Obj.obj x, Sequence.empty) - in LazyGraph.make ~eq:(==) force - -let word_size = Sys.word_size / 8 - -let size x = - if Obj.is_block x - then (1+Obj.size x) * word_size - else word_size - -let compute_size x = - let o = Obj.repr x in - let vertices = LazyGraph.bfs graph o in - Sequence.fold (fun sum (o',_,_) -> size o' + sum) 0 vertices - -let print_val fmt x = - let o = Obj.repr x in - let graph' = LazyGraph.map ~edges:(fun i -> [`Label (string_of_int i)]) - ~vertices:(fun v -> [`Label (string_of_int v); `Shape "box"]) graph in - LazyGraph.Dot.pp ~name:"value" graph' fmt (Sequence.singleton o) - -let print_val_file filename x = - let out = open_out filename in - let fmt = Format.formatter_of_out_channel out in - print_val fmt x; - Format.pp_print_flush fmt (); - close_out out - -let process_val ~name x = - print_val_file (Format.sprintf "/tmp/%s.dot" name) x; - Format.printf "size of val is %d@." (compute_size x) - -module ISet = Set.Make(struct type t = int let compare = compare end) - -let mk_circ n = - let start = Sequence.to_list (1--n) in - (* make the end of the list point to its beginning *) - let rec cycle l = match l with - | [] -> assert false - | [_] -> Obj.set_field (Obj.repr l) 1 (Obj.repr start) - | _::l' -> cycle l' - in - cycle start; - start - -let _ = - let s = Sequence.fold (fun s x -> ISet.add x s) ISet.empty (1--100) in - process_val ~name:"foo" s; - let l = Sequence.to_list (Sequence.map (fun i -> Sequence.to_list (i--(i+42))) - (Sequence.of_list [0;100;1000])) in - process_val ~name:"bar" l; - let l' = mk_circ 100 in - process_val ~name:"baaz" l'; - ()