Skip to content

Instantly share code, notes, and snippets.

@moozzyk
Last active February 4, 2018 02:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save moozzyk/22627314c8df982c5d91b51654ec6ff2 to your computer and use it in GitHub Desktop.
Save moozzyk/22627314c8df982c5d91b51654ec6ff2 to your computer and use it in GitHub Desktop.
Ocaml
let is_prime n =
let rec is_prime_aux n div =
if div > int_of_float (sqrt n) then true
else if n mod div = 0 then false
else is_prime_aux n (div + 1)
in
is_prime_aux n 2
(* Error: This expression has type float but an expression was expected of type
int
Points to `n` in `if n mod div...` *)
let is_prime n =
let rec is_prime_aux n div =
if div > int_of_float(sqrt (float_of_int n)) then true
else if n mod div = 0 then false
else is_prime_aux n (div + 1)
in
is_prime_aux n 2
let sum a b =
let s = a + b
print_int
(* Error: Syntax error *)
let sum a b =
let s = a + b in
print_int s
(* val sum : int -> int -> unit = <fun> *)
print_int 2 + 3
(* Error: This expression has type unit but an expression was expected of type
int *)
print_int (2 + 3)
(* Result: 5 *)
print_string "a"^"b"
(* Error: This expression has type unit but an expression was expected of type
string *)
print_string ("a"^"b")
(* Result: ab *)
print_int max 4 5
(* Error: This function has type int -> unit
It is applied to too many arguments; maybe you forgot a `;'. *)
print_int (max 4 5)
(* Result: 5 *)
let factorial n =
if n = 0 then 1
else n * factorial(n - 1)
(* Error: Unbound value factorial *)
let rec factorial n =
if n = 0 then 1
else n * factorial(n - 1)
(* val factorial : int -> int = <fun> *)
print_string "a"
print_string "b"
(* Error: This function has type string -> unit
It is applied to too many arguments; maybe you forgot a `;'. *)
print_string "a";
print_string "b"
(* Result: ab *)
print_int -5
(* Error: This expression has type int -> unit
but an expression was expected of type int *)
print_int (-5)
(* Result: -5 *)
let read_lines name : string list =
let ic = open_in name in
let try_read () =
try Some (input_line ic) with End_of_file -> None in
let rec loop acc = match try_read () with
| Some s -> loop (s :: acc)
| None -> close_in ic; List.rev acc in
loop []
let explode s =
let rec exp i l =
if i < 0 then l else exp (i - 1) (s.[i] :: l) in
exp (String.length s - 1) []
let sum list = List.fold_left (fun v a -> a + v) 0 list
sum [1;2;3] "a"
(* Error: This function has type int list -> int
It is applied to too many arguments; maybe you forgot a `;'. *)
sum [1;2;3]
(* Result: 6 *)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment