Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
1+2*3;; let pi = 4.0 *. atan 1.0;; let square x = x *. x;; square(sin pi) +. square(cos pi);; 1.0 * 2;; let rec fib n = if n < 2 then 1 else fib(n-1) + fib(n-2);; fib 10;; (1 < 2) = false;; 'a';; "Hello world";; let l = ["is"; "a"; "tale"; "told"; "etc."];; "Life" :: l;; let rec sort lst = match lst with | [] -> [] | head :: tail -> insert head (sort tail) and insert elt lst = match lst with | [] -> [elt] | head :: tail -> if elt <= head then elt :: lst else head :: insert elt tail ;; sort l;; sort [6;2;5;3];; sort [3.14; 2.718];; let deriv f dx = function x -> (f(x +. dx) -. f(x)) /. dx;; let sin' = deriv sin 1e-6;; sin' pi;; let compose f g = function x -> f(g(x));; let cos2 = compose square cos;; List.map (function n -> n * 2 + 1) [0;1;2;3;4];; let rec map f l = match l with | [] -> [] | hd :: tl -> f hd :: map f tl;; type ratio = {num: int; denum: int};; let add_ratio r1 r2 = {num = r1.num * r2.denum + r2.num * r1.denum; denum = r1.denum * r2.denum};; add_ratio {num=1; denum=3} {num=2; denum=5};; type number = Int of int | Float of float | Error;; type sign = Positive | Negative;; let sign_int n = if n >= 0 then Positive else Negative;; let add_overflows i1 i2 = sign_int i1 = sign_int i2 && sign_int(i1 + i2) <> sign_int i1;; let add_num n1 n2 = match (n1, n2) with | (Int i1, Int i2) -> if add_overflows i1 i2 then Float(float i1 +. float i2) else Int(i1 + i2) | (Int i1, Float f2) -> Float(float i1 +. f2) | (Float f1, Int i2) -> Float(f1 +. float i2) | (Float f1, Float f2) -> Float(f1 +. f2) | (Error, _) -> Error | (_, Error) -> Error;; add_num (Int 123) (Float 3.14159);; type 'a btree = Empty | Node of 'a * 'a btree * 'a btree;; let rec member x btree = match btree with | Empty -> false | Node(y, left, right) -> if x = y then true else if x < y then member x left else member x right;; let rec insert x btree = match btree with | Empty -> Node(x, Empty, Empty) | Node(y, left, right) -> if x <= y then Node(y, insert x left, right) else Node(y, left, insert x right);; let add_vect v1 v2 = let len = min (Array.length v1) (Array.length v2) in let res = Array.create len 0.0 in for i = 0 to len - 1 do res.(i) <- v1.(i) +. v2.(i) done; res;; add_vect [| 1.0; 2.0 |] [| 3.0; 4.0 |];; type mutable_point = { mutable x: float; mutable y: float };; let translate p dx dy = p.x <- p.x +. dx; p.y <- p.y +. dy;; let mypoint = { x = 0.0; y = 0.0 };; translate mypoint 1.0 2.0;; mypoint;; let insertion_sort a = for i = 1 to Array.length a - 1 do let val_i = a.(i) in let j = ref i in while !j > 0 && val_i < a.(!j - 1) do a.(!j) <- a.(!j - 1); j := !j - 1 done; a.(!j) <- val_i done;; let current_rand = ref 0;; let random () = current_rand := !current_rand * 25713 + 1345; !current_rand;; type 'a ref = { mutable contents: 'a };; let (!) r = r.contents;; let (:=) r newval = r.contents <- newval;; type idref = { mutable id: 'a. 'a -> 'a };; let r = {id = fun x -> x};; let g s = (s.id 1, s.id true);; r.id <- (fun x -> print_string "called id\n"; x);; g r;; exception Empty_list;; let head l = match l with | [] -> raise Empty_list | hd :: tl -> hd;; head [1;2];; head [];; List.assoc 1 [(0, "zero"); (1, "one")];; List.assoc 2 [(0, "zero"); (1, "one")];; let name_of_binary_digit digit = try List.assoc digit [0, "zero"; 1, "one"] with Not_found -> "not a binary digit";; name_of_binary_digit 0;; name_of_binary_digit (-1);; let temporarily_set_reference ref newval funct = let oldval = !ref in try ref := newval; let res = funct () in ref := oldval; res with x -> ref := oldval; raise x;; type expression = Const of float | Var of string | Sum of expression * expression (* e1 + e2 *) | Diff of expression * expression (* e1 - e2 *) | Prod of expression * expression (* e1 * e2 *) | Quot of expression * expression (* e1 / e2 *) ;; exception Unbound_variable of string;; let rec eval env exp = match exp with | Const c -> c | Var v -> (try List.assoc v env with Not_found -> raise(Unbound_variable v)) | Sum(f, g) -> eval env f +. eval env g | Diff(f, g) -> eval env f -. eval env g | Prod(f, g) -> eval env f *. eval env g | Quot(f, g) -> eval env f /. eval env g;; eval [("x", 1.0); ("y", 3.14)] (Prod(Sum(Var "x", Const 2.0), Var "y"));; let rec deriv exp dv = match exp with | Const c -> Const 0.0 | Var v -> if v = dv then Const 1.0 else Const 0.0 | Sum(f, g) -> Sum(deriv f dv, deriv g dv) | Diff(f, g) -> Diff(deriv f dv, deriv g dv) | Prod(f, g) -> Sum(Prod(f, deriv g dv), Prod(deriv f dv, g)) | Quot(f, g) -> Quot(Diff(Prod(deriv f dv, g), Prod(f, deriv g dv)), Prod(g, g)) ;; deriv (Quot(Const 1.0, Var "x")) "x";; let print_expr exp = (* Local function definitions *) let open_paren prec op_prec = if prec > op_prec then print_string "(" in let close_paren prec op_prec = if prec > op_prec then print_string ")" in let rec print prec exp = (* prec is the current precedence *) match exp with Const c -> print_float c | Var v -> print_string v | Sum(f, g) -> open_paren prec 0; print 0 f; print_string " + "; print 0 g; close_paren prec 0 | Diff(f, g) -> open_paren prec 0; print 0 f; print_string " - "; print 1 g; close_paren prec 0 | Prod(f, g) -> open_paren prec 2; print 2 f; print_string " * "; print 2 g; close_paren prec 2 | Quot(f, g) -> open_paren prec 2; print 2 f; print_string " / "; print 3 g; close_paren prec 2 in print 0 exp;; let e = Sum(Prod(Const 2.0, Var "x"), Const 1.0);; print_expr e; print_newline();; print_expr (deriv e "x"); print_newline();; #load "camlp4o.cma";; open Genlex;; let lexer = make_lexer ["("; ")"; "+"; "-"; "*"; "/"];; let token_stream = lexer(Stream.of_string "1.0 +x");; Stream.next token_stream;; Stream.next token_stream;; Stream.next token_stream;; let rec parse_expr = parser [< e1 = parse_mult; e = parse_more_adds e1 >] -> e and parse_more_adds e1 = parser [< 'Kwd "+"; e2 = parse_mult; e = parse_more_adds (Sum(e1, e2)) >] -> e | [< 'Kwd "-"; e2 = parse_mult; e = parse_more_adds (Diff(e1, e2)) >] -> e | [< >] -> e1 and parse_mult = parser [< e1 = parse_simple; e = parse_more_mults e1 >] -> e and parse_more_mults e1 = parser [< 'Kwd "*"; e2 = parse_simple; e = parse_more_mults (Prod(e1, e2)) >] -> e | [< 'Kwd "/"; e2 = parse_simple; e = parse_more_mults (Quot(e1, e2)) >] -> e | [< >] -> e1 and parse_simple = parser [< 'Ident s >] -> Var s | [< 'Int i >] -> Const(float i) | [< 'Float f >] -> Const f | [< 'Kwd "("; e = parse_expr; 'Kwd ")" >] -> e;; let parse_expression = parser [< e = parse_expr; _ = Stream.empty >] -> e;; let read_expression s = parse_expression(lexer(Stream.of_string s));; read_expression "2*(x+y)";; read_expression "x - 1";; read_expression "x-1";;