1. El compilador y OCaml
Ejercicios sueltos compilador
();;
2 + 5 * 3;;
1.0;;
2-2.0;;
3.0 + 2.0;;
(suma decimal es +.)
5/3;;
5 mod 3;;
2.0 *. 2.0 ** 3.0;;
3.0 = float_of_int 3;;
(comparación)
sqrt 4
(sqrt es decimal, 4.)
int_of_float 2.1 + int_of_float (-2.9);;
truncate 2.1 + truncate (-2.9);;
(truncate es int)
floor 2.1 +. floor (-2.9);;
(floor es float)
ceil 2.1 + ceil (-2.9);;
(ceil es float)
2.0 ** 3.0 ** 2.0;;
'B';;
int_of_char 'A';;
char_of_int 66;;
Char.code 'B';;
Char.chr 67;;
'\067';;
Char.chr (Char.code 'a' - Char.code 'A' + Char.code 'M');;
(109)
"This is a string";;
String.length "longitud";;
"1999" + "1";;
"1999" ^ "1";;
int_of_string "1999" + 1;;
"\064\065";;
string_of_int 010;;
not true;;
true && false;;
true || false;;
(1 < 2) = false;;
"1" < "2";;
2 < 12;;
"2" < "12";;
(compara solo el primer char del string)
"uno" < "dos";;
"uno" < "dos";;
if 3 = 4 then 0 else 4;;
if 3 = 4 then "0" else "4";;
if 3 = 4 then 0 else "4";;
(if solo devuelve un tipo)
(if 3 < 5 then 8 else 10) + 4;;
(if 3 < 5 then 8 else 10) + 4;;
2.0 *. asin 1.0;;
function x -> 2 * x;;
(function x -> 2 * x) (2 + 1);;
let x = 1;;
let y = 2;;
x-y;;
let x = y in x - y;;
(x = 2 in 2 - 2, variable local)
x - y;;
z;;
let z = x + y;;
let y = 5 in x + y;;
(1 + 5, variable local)
x + y;;
let x = x + y in let y = x * y in x + y + z;;
(x = 3, y = 6, z = 3)
x + y + z;;
int_of_float;;
float_of_int;;
abs;;
sqrt;;
truncate;;
ceil;;
floor;;
Char.code;;
let f = function x -> 2 * x;;
f (2 + 1);;
f 2 + 1;;
let n = 1;;
let g x = x + n;;
(x = x + n es una función)
g 3;;
let l = function r -> let pi = 2.0 *. asin 1.0 in 2.0 *. pi *. r;;
l 3.0;;
l 2;;
pi;;
let pi = 2.0 *. asin 1.0;;
pi;;
let v = function r -> pi *. r ** 2.0;;
v 2.0;;
Examen enero 2024
let print_newline () = print_endline " ";;
let lista = (1, 2) :: (3, 4) :: (5, 6) :: [];;
let _ :: lista = lista in List.tl lista;;
let x, y = List.hd lista;;
let fst (x, _) = x and snd (_, x) = x;;
let map_pair (f1, f2) l = List.map f1 l, List.map f2 l;;
let l1, l2 = map_pair (snd, fst) lista;;
(2 < 2 / 1) && (1 < 1 / 0);;
let iter f v = for i = 0 to Array.length v - 1 do f v.(i) done;;
let v = Array.init 3(fun i -> object method number = i end);;
let pr_number v = iter (fun e -> print_int e#number) v;;
Examen enero 2023
let x = let x = 3 in x * x;;
x + let x = x + 1 in x * x;;
(9 + 10 * 10)
function x -> x;;
(la x no es la variable anterior, es el parámetro de la función)
let app x f = f x;;
let app x f = f x;;
(f = f x es una función)
app 2 (+);;
app 2 (+) 4;;
let x::y = let _::t = [1;2;3] in t;;
(t = [2,3], x = head = 2, y = tail = [3])
List.fold_left (fun x f -> f x) 0 [(+) 1; (-)10; fun x -> - x * x];;
(+1-10 = 9, -(9*9))
(A la h1 y h2 de la lista se le aplica la operación y a esta se le van concatenando los resultados de las siguientes operaciones hasta que solo quede 1 elemento)
f max [3;2;4;5;1];;
(max 3 y 2 :: [451], max 4 y 5, _)
Examen enero 2021
let f3 f x = (x, f x, f (f x));;
(f es una función con un parámetro x, como le entra x y devuelve x tiene que ser del mismo tipo)
f3 abs (-2);;
(el primero es el número tal cual, el segundo pasa por la función y el tercero pasa por la función dos veces)
let g x = x * x in f3 g 2;;
((2,2 * 2,(2*2)*4))
let x, y, z = let g x = x * x in f3 g 2;;
((2,4,16))
(function _::_::t -> t) [1;2;3];;
(función anónima)
List.map (function x -> 2 * x + 1);;
(a list map le pasas la función (‘a -> ‘b) que requiere pero le falta la lista)
val map : (‘a -> ‘b) -> ‘a list -> ‘b list
f [1000; 100; 10], f [1000;10;1];;
(1000+100-10) (1000+10-1)
List.fold_right (-) [4;3;2] 1;;
((4-(3-(2-1))))
val fold_right : (‘a -> ‘b -> ‘b) -> ‘a list -> ‘b -> ‘b
- Ejercicio 2
comb (+);;
comb (+) [1;2;3;4;5];;
([1+2,3+4,5])
- `let nothing = None;;“
-
Ejercicio 3
type 'a tree = T of 'a * 'a tree list;;
-
let s x = T (x,[]);;
let t = T (1,[s 2; s 3; s 4]);;
sum t;;
Examen enero 2020
let f = List.fold_left (fun x y -> 2*x +y) 0;;
f [1;0;1;1],f[1;1;1;1];;
[base 2 1; base 2 16; base 10 2021];;
Examen enero 2019
let x,y = 2+1,0;;
(function x -> function y -> 2*y) y x;;
(la y se corresponde con la x de la derecha)
let f = fun y -> (+) x y;;
(x = 3, y es el nuevo parámetro int)
let g f x = f (f x) in g f 5;;
(3+(3+5))
let h = fun x y -> y::x;;
(a::a list)
h ['h'];;
h [] [0];;
let x,y = y,x;;
let v = ref x;;
v+1;;
let w=v;;
w:=!w+1;!v,!w;;
(copia, al modificar w modificas v)
Examen julio 2019
List.map (fun x-> x,x) ['a';'e';'i'];;
(se imprime el resultado y x es una variable interna, por lo que no tiene nada)
let f = fold (+) 0 in f[1;2;3];;
let push f(h::t) = f h::h::t;; let succ = (+) 1 in repeat 3 (push succ) [0];;
Pablo Portas López © 2025 licensed under CC BY 4.0
Clara Valle Código - © 2022