();;
(* - : unit = () *)
(**)

2 + 5 * 3;;
  - : int 17
Muestra      opera

1.0;;
  - : float = 1 .
(*Devuelve un 1 que es un float*)

1.0 *. 2.;;
  Error de tipo por multiplicar     entero
(*Error: This expression has type float but an expression was expected of type
         int*)

2. -. 2.0;;
  Error de tipo por   entero con  
(*Error: This expression has type float but an expression was expected of type
         int*)

3.0 +. 2.0;;
  Error de tipo por   resta de enteros con  flotantes
(* Error: This expression has type float but an expression was expected of type
         int*)

5 / 3;;
  - : int = 1
  Estamos haciendo una  

5 mod 3;;
  - : int = 2
  Devolverá el resto    entre 2

3.0 *. 2.0 ** 3.0;;
  - : float = 24
  Operación de flotantes

3.0 = float_of_int 3;;
  Error de tipo :      a su entero
(* Error: This expression has type float but an expression was expected of type
         int*)

sqrt 4.;;
  - : int = 2 ---- Error de tipo : Realmete no hace la operación porque sqrt necesita un flotante
(*Error: This expression has type int but an expression was expected of type
         float*)

int_of_float 2.1 + int_of_float (-2.9);;
(* - : int = 0 *)
  Convierte el flotante 2.1 y -2.9 a entero y  

truncate 2.1 + truncate(-2.9);;
(* - : int = 0 *)
       y para arriba los negativos y opera

floor 2.1 +. floor (-2.9);;
(* - : int = -1 *)
(* Rendondea para abajo y opera*)

ceil 2.1 +. ceil (-2.9);;
  Error sintáctico : Dará error por no poner entre paréntesis   negativo
(*Error: This expression has type float -> float
       but an expression was expected of type float*)

2.0 ** 3.0 ** 2.0;;
  - : float = 512
(* Opera las potencias *)

'B';;
(* - : char = 'B'*)
  Muestra el caracter

int_of_char 'A';;
          A '
  - : int 65

char_of_int 66;;
  Mostrará a que caracter se corresponde   66
(* - : char = 'B'*)

Char.code 'B';;
  Mostrará el código del caracter ' B '
  - : int = 66

Char.chr 67;;
  Mostrará el caracter del código 67
(*- : char = 'C'*)

'\067';;
  Es otra forma de poner     caracter
(*- : char = 'C'*)

Char.chr (Char.code 'a' - Char.code 'A' + Char.code 'M');;
  Transforma las letras a código , opera con ellas     a caracter
(*- : char = 'm'*)

"this is a string";;
(* - : string = "this is a string" *)
  Muestra el string

String.length "longitud";;
  - : int = 8
  Devuelve cuantas letras hay en la cadena

"1999" ^ "1";;
  Error de tipo : No se   strings
(* Error: This expression has type string but an expression was expected of type
         int*)

"1999" ^ "1";;
  - : string = " 19991 "
  El operador ^ sirve para concatenar strings

int_of_string "1999" + 1;;
  - : int = 2000
  Pasará el " 1999 " a cadena y le sumará 1

"\064\065";;
    string de dos caracteres
  - : string = " @A "

string_of_int 010;;
  - : string = " 010 " ----- > - : string = " 10 "
  Pasa el número a string ,     

not true;;
(* - : bool = false *)
(* La negación de un true es false*)

true && false;;
(* - : bool = false *)
  Un AND es false si uno de las entradas es false

true || false;;
(* - : bool = true *)
  Un OR es true       

(1 < 2) = false;;
(* - : bool = false*)
  Comprueba si 1 < 2 es falso

"1" < "2";;
  Compureba si el código de " 1 " es menor que el de " 2 "
(* - : bool = true *)

2 < 12;;
(* - : bool = true *)
    2    12

"2" < "12";;
(* - : bool = false *)
    con las cadenas

"uno" < "dos";;
  Vuelve a comprobar con las cadenas
(**)

if 3 = 4 then 0 else 4;;
  - : int 4
         son  , como no lo son  el 4

if 3 = 4 then "0" else "4";;
  - : string = " 4 "
  Vuelve a comprobar ,    string

if 3 = 4 then 0 else 4;;
  - : string = " 4 " ---- Da error de tipo , deben de ser del mismo tipo
(* Error: This expression has type string but an expression was expected of type
         int *)

(if 3 < 5 then 8 else 10) + 4;;
  - : int = 12
  Ejecuta primero el condicional , y después le suma el número 4

2.0 *. asin 1.0;;
(* Devolverá un flotante *)
  Da como salida : - : float = 3.14159265358979312 , es el núemro pi

sin (2.0 *. asin 1.0 /. 2.);;
     ,     ,     y lo multiplicará 
 por dos ,    función seno con el resultado
por dos, luego hará la función seno con el resultado*)
  - : float = 1 .

function x -> 2 * x;;
(* Crea una finción *)
(* - : int -> int = <fun> *)

(function x -> 2 * x) (2 + 1);;
  - : int = 6
  Ejecuta la función tomando como parámetro la suma 2 + 1

let x = 1;;
(* Crea una variable x*)
  val x : int = 1

let y = 2;;
  val y : int = 2
(* Crea la variable y*)

x - y;;
(* - : int = -1 *)
  Hace la resta 1 - 2

let x = y in x - y;;
(* - : int = 0 *)
(**)

x - y;;
(* - : int = -1 *)
  Da el resultado    anterior línea no existiese

let z = 0;;
     error de ejecución por   variable que no se declaró
(* Error: Unbound value z *)

let z = x + y;;
  val z : int = 3
  Suma x e y , y se      z *

z;;
  - : int = 3
  Como ahora ya se   devuelve el valor asignado

let x = 5;;
  val x : int = 5
    nueva valor a x

z;;
  - : int = 3
(* Devolverá el valor de antes porque aun no se modificó su valor*)

let y = 5 in x + y;;
(**)
  - : int = 10

x + y;;
  - : int = 7
  Hace la suma de 5 + 2

let x = x + y in let y = x * y in x + y + z;;
(**)
  - : int = 24

x + y + z;;
  - : int = 10
  Hace la suma de 5 + 2 + 3

int_of_float;;
(* - : float -> int = <fun>*)
  Es una finción que       entero

float_of_int;;
(* - : int -> float = <fun> *)
  A partir de un entero ,   

int_of_char;;
(* - : char -> int = <fun> *)
  Saca el entero de un caracter

char_of_int;;
(* - : int -> char = <fun> *)
(* Convierte un entero en un caracter *)

abs;;
(* - : int -> int = <fun> *)
  Convierte un entero en el valor 

sqrt;;
(* - : float -> float = <fun> *)
  Calcula la raíz cuadrada de un flotante

truncate;;
(*  *)
(* - : float -> int = <fun> *)

ceil;;
(* - : float -> float = <fun> *)
    arriba  

floor;;
(* - : float -> float = <fun> *)
      

Char.code;;
(* - : char -> int = <fun> *)
  Convierte un char en   

Char.chr;;
(* - : int -> char = <fun> *)
  Convierte un código de enteros en   ASCII

int_of_string;;
(* - : string -> int = <fun> *)
       string

string_of_int;;
(* - : int -> string = <fun> *)
  Convierte un string a apartier de un núemro

String.length;;
(* - : String -> int = <fun> *)
  Cuenta el número de letras y retona un entero

let f = function x -> 2 * x;;
(* Crea un función f*)
(**)

f (2+1);;
  - : int = 6
  Se mete     3 y retorna el doble

f 2 + 1;;
  - : int = 5
  Hace la función sobre el número 2 y luego le suma 1

let n = 1;;
  val n : int = 1
(* Crea la variable n *)

let g x = x + n;;
(* val g : int -> int = <fun> *)
  Crea la  

g 3;;
  - : int = 4
  Se usa la funcion g con el parámetro 3

let n = 5;;
  val n : int = 5
(* Se cambia el valor de n *)

g 3;;
  - : int = 8 ----- - : int = 4
  Da como resultado 4 porque la función g se    valía 1

let l = function r -> let pi = 2.0 *. asin 1.0 in 2.0 +. pi *. r;;
  Hace una función r ,  en la variable l
(* val l : float -> float = <fun> *)

l 3.0;;
         
  - : float = 11.4247779607693793 l 2

l 2.;;
    error porque tiene que recibir un float
(* Error: This expression has type int but an expression was expected of type
         float *)

let pi = 0;;
    error poruqe aun no definimos pi
(* Error: Unbound value pi *)

let pi = 2.0 *. asin 1.0;;
(* Asigna el valor de pi a la variable pi *)
  val pi : float = 3.14159265358979312

pi;;
        
  - : float = 3.14159265358979312

let v = function r -> pi *. r ** 2.0;;
(* val v : float -> float <fun> *)
(* Crea una función r en la variable v*)

v 2.0;;
    valor flotante
  - : float = 12.5663706143591725

 - : unit = () 

Devuelve un 1 que es un float
Error: This expression has type float but an expression was expected of type
         int
Error: This expression has type float but an expression was expected of type
         int
 Error: This expression has type float but an expression was expected of type
         int
 Error: This expression has type float but an expression was expected of type
         int
Error: This expression has type int but an expression was expected of type
         float
 - : int = 0 
 - : int = 0 
 - : int = -1 
 Rendondea para abajo y opera
Error: This expression has type float -> float
       but an expression was expected of type float
 Opera las potencias 
 - : char = 'B'
 - : char = 'B'
- : char = 'C'
- : char = 'C'
- : char = 'm'
 - : string = "this is a string" 
 Error: This expression has type string but an expression was expected of type
         int
 - : bool = false 
 La negación de un true es false
 - : bool = false 
 - : bool = true 
 - : bool = false
 - : bool = true 
 - : bool = true 
 - : bool = false 

 Error: This expression has type string but an expression was expected of type
         int 
 Devolverá un flotante 
 Crea una finción 
 - : int -> int = <fun> 
 Crea una variable x
 Crea la variable y
 - : int = -1 
 - : int = 0 

 - : int = -1 
 Error: Unbound value z 
 Devolverá el valor de antes porque aun no se modificó su valor


 - : float -> int = <fun>
 - : int -> float = <fun> 
 - : char -> int = <fun> 
 - : int -> char = <fun> 
 Convierte un entero en un caracter 
 - : int -> int = <fun> 
 - : float -> float = <fun> 
  
 - : float -> int = <fun> 
 - : float -> float = <fun> 
 - : float -> float = <fun> 
 - : char -> int = <fun> 
 - : int -> char = <fun> 
 - : string -> int = <fun> 
 - : int -> string = <fun> 
 - : String -> int = <fun> 
 Crea un función f

 Crea la variable n 
 val g : int -> int = <fun> 
 Se cambia el valor de n 
 val l : float -> float = <fun> 
 Error: This expression has type int but an expression was expected of type
         float 
 Error: Unbound value pi 
 Asigna el valor de pi a la variable pi 
 val v : float -> float <fun> 
 Crea una función r en la variable v
();;

2 + 5 * 3;;
  - : int 17
Muestra      opera

1.0;;
  - : float = 1 .

1.0 *. 2.;;
  Error de tipo por multiplicar     entero

2. -. 2.0;;
  Error de tipo por   entero con  

3.0 +. 2.0;;
  Error de tipo por   resta de enteros con  flotantes

5 / 3;;
  - : int = 1
  Estamos haciendo una  

5 mod 3;;
  - : int = 2
  Devolverá el resto    entre 2

3.0 *. 2.0 ** 3.0;;
  - : float = 24
  Operación de flotantes

3.0 = float_of_int 3;;
  Error de tipo :      a su entero

sqrt 4.;;
  - : int = 2 ---- Error de tipo : Realmete no hace la operación porque sqrt necesita un flotante

int_of_float 2.1 + int_of_float (-2.9);;
  Convierte el flotante 2.1 y -2.9 a entero y  

truncate 2.1 + truncate(-2.9);;
       y para arriba los negativos y opera

floor 2.1 +. floor (-2.9);;

ceil 2.1 +. ceil (-2.9);;
  Error sintáctico : Dará error por no poner entre paréntesis   negativo

2.0 ** 3.0 ** 2.0;;
  - : float = 512

'B';;
  Muestra el caracter

int_of_char 'A';;
          A '
  - : int 65

char_of_int 66;;
  Mostrará a que caracter se corresponde   66

Char.code 'B';;
  Mostrará el código del caracter ' B '
  - : int = 66

Char.chr 67;;
  Mostrará el caracter del código 67

'\067';;
  Es otra forma de poner     caracter

Char.chr (Char.code 'a' - Char.code 'A' + Char.code 'M');;
  Transforma las letras a código , opera con ellas     a caracter

"this is a string";;
  Muestra el string

String.length "longitud";;
  - : int = 8
  Devuelve cuantas letras hay en la cadena

"1999" ^ "1";;
  Error de tipo : No se   strings

"1999" ^ "1";;
  - : string = " 19991 "
  El operador ^ sirve para concatenar strings

int_of_string "1999" + 1;;
  - : int = 2000
  Pasará el " 1999 " a cadena y le sumará 1

"\064\065";;
    string de dos caracteres
  - : string = " @A "

string_of_int 010;;
  - : string = " 010 " ----- > - : string = " 10 "
  Pasa el número a string ,     

not true;;

true && false;;
  Un AND es false si uno de las entradas es false

true || false;;
  Un OR es true       

(1 < 2) = false;;
  Comprueba si 1 < 2 es falso

"1" < "2";;
  Compureba si el código de " 1 " es menor que el de " 2 "

2 < 12;;
    2    12

"2" < "12";;
    con las cadenas

"uno" < "dos";;
  Vuelve a comprobar con las cadenas

if 3 = 4 then 0 else 4;;
  - : int 4
         son  , como no lo son  el 4

if 3 = 4 then "0" else "4";;
  - : string = " 4 "
  Vuelve a comprobar ,    string

if 3 = 4 then 0 else 4;;
  - : string = " 4 " ---- Da error de tipo , deben de ser del mismo tipo

(if 3 < 5 then 8 else 10) + 4;;
  - : int = 12
  Ejecuta primero el condicional , y después le suma el número 4

2.0 *. asin 1.0;;
  Da como salida : - : float = 3.14159265358979312 , es el núemro pi

sin (2.0 *. asin 1.0 /. 2.);;
     ,     ,     y lo multiplicará 
 por dos ,    función seno con el resultado
por dos, luego hará la función seno con el resultado*)
  - : float = 1 .

function x -> 2 * x;;

(function x -> 2 * x) (2 + 1);;
  - : int = 6
  Ejecuta la función tomando como parámetro la suma 2 + 1

let x = 1;;
  val x : int = 1

let y = 2;;
  val y : int = 2

x - y;;
  Hace la resta 1 - 2

let x = y in x - y;;

x - y;;
  Da el resultado    anterior línea no existiese

let z = 0;;
     error de ejecución por   variable que no se declaró

let z = x + y;;
  val z : int = 3
  Suma x e y , y se      z *

z;;
  - : int = 3
  Como ahora ya se   devuelve el valor asignado

let x = 5;;
  val x : int = 5
    nueva valor a x

z;;
  - : int = 3

let y = 5 in x + y;;
  - : int = 10

x + y;;
  - : int = 7
  Hace la suma de 5 + 2

let x = x + y in let y = x * y in x + y + z;;
  - : int = 24

x + y + z;;
  - : int = 10
  Hace la suma de 5 + 2 + 3

int_of_float;;
  Es una finción que       entero

float_of_int;;
  A partir de un entero ,   

int_of_char;;
  Saca el entero de un caracter

char_of_int;;

abs;;
  Convierte un entero en el valor 

sqrt;;
  Calcula la raíz cuadrada de un flotante

truncate;;

ceil;;
    arriba  

floor;;
      

Char.code;;
  Convierte un char en   

Char.chr;;
  Convierte un código de enteros en   ASCII

int_of_string;;
       string

string_of_int;;
  Convierte un string a apartier de un núemro

String.length;;
  Cuenta el número de letras y retona un entero

let f = function x -> 2 * x;;

f (2+1);;
  - : int = 6
  Se mete     3 y retorna el doble

f 2 + 1;;
  - : int = 5
  Hace la función sobre el número 2 y luego le suma 1

let n = 1;;
  val n : int = 1

let g x = x + n;;
  Crea la  

g 3;;
  - : int = 4
  Se usa la funcion g con el parámetro 3

let n = 5;;
  val n : int = 5

g 3;;
  - : int = 8 ----- - : int = 4
  Da como resultado 4 porque la función g se    valía 1

let l = function r -> let pi = 2.0 *. asin 1.0 in 2.0 +. pi *. r;;
  Hace una función r ,  en la variable l

l 3.0;;
         
  - : float = 11.4247779607693793 l 2

l 2.;;
    error porque tiene que recibir un float

let pi = 0;;
    error poruqe aun no definimos pi

let pi = 2.0 *. asin 1.0;;
  val pi : float = 3.14159265358979312

pi;;
        
  - : float = 3.14159265358979312

let v = function r -> pi *. r ** 2.0;;

v 2.0;;
    valor flotante
  - : float = 12.5663706143591725
