PDF de programación - Resumen del estilo imperativo de Ocaml

Imágen de pdf Resumen del estilo imperativo de Ocaml

Resumen del estilo imperativo de Ocamlgráfica de visualizaciones

Publicado el 14 de Enero del 2017
1.267 visualizaciones desde el 14 de Enero del 2017
235,7 KB
6 paginas
Creado hace 12a (26/08/2011)
Resumen del estilo imperativo de Ocaml

Jorge Alberto Chávez sarmiento

Resumen



Los apuntes que se presentan son unas notas breves de clase, no pretenden ser una guia para aprender ocaml,

son mas bien una pequeña guia para recordar los comandos más básicos de la parte imperativa de este lenguaje.

Código 1: Algunos ejemplos

1 # l e t b =3;;
2 # l e t g x = b∗x ; ;
3 # g 4 ; ;
4 −:
5 # l e t b = 4 ; ;
6 # g 4 ; ;
7 −:

i n t = 12

i n t =12 ( \neq 16)

1 Referencias

Código 2: Uso de referencias

l e t b = r e f 3 ; ;

1
2 v a l b = i n t

r e f ={c o n t e n t s = 3}

como 3 es de tipo int, el tipo de la casilla b, es el tipo de las referencias que contienen int.
Se nota int ref
El contenido puede cambiar pero el tipo no. “ref” es un constructor de tipo (como list, -> , arbol_bin )
para hablar del contenido de b: !b

Código 3: Ejemplos de referencias













! 3 ; ;

i n t =3;;

1
2 −:
3 # 3+!b ; ;
4 −: i n t=6
5 # l e t g x = ! b∗x ; ;
6 # g 4 ; ;
7 −:

i n t = 12

1 b:= 4 ; ;
2
s i g n i f i c a :
3 −: u n i t =( )
4 # ! b ; ;
5 −:
6 # g 4 ; ;
7 −:
8 # b:= ’ hola ’ ; ;
9

i n t = 4 ; ;

i n t = 16

e r r o r :

t i p o s t r i n g en vez de i n t .

Modificar el contenido de b:

Código 4: Modificando contenido de referencias

e l nuevo contenido de b va a s e r 4

1



















2 Funciones:



Definir una función para agregar 1 al contenido del parámetro.

Código 5: Función Incremento

r = r := ! r +1;;
i n t

r e f −> u n i t = < fun >

)

i n c r

i n c r
1 # l e t
2 v a l
:
3 # i n c r b ; ;
4 −: u n i t = (
5 # ! b ; ;
6 −:

i n t = 5



Las funciones para incrementar y decrementar ya vienen definidas en caml por incr y decr, respectivamente.

3 Valores compartidos



Código 6: Valores compartidos

r1=r e f 1 ; ;

i n t

r e f = { c o n t e n t s = 1}

r2 = r1 ; ;

l a misma c a s i l l a )

r e f = { c o n t e n t s = 2}

r1 :

1 # l e t
2 v a l
3 # l e t
4 ( es
5 # r2 := 2 ; ;
6 −: u n i t = (
7 # r1 ; ;
8
9 # r1 := 4 ; ;
10 # ! r2 ; ;
11 −:

i n t = 4

i n t



)

4

Impresión a la pantalla

No existe función general:

i n t −> u n i t

1 p r i n t _ i n t :
f l o a t −> u n i t
2 p r i n t _ f l o a t :
s t r i n g −> u n i t
3 p r i n t _ s t r i n g :
4 print_char : char −> u n i t
5 print_newline : u n i t −> u n i t

Código 7: Impresión en pantalla

( para e j e c u t a r e s t a f u n c i o n print_newline (

)

)











\n

es un carácter especial para saltar una línea.

Código 8: Ejemplo de impresión en pantalla

1 # p r i n t _ s t r i n g " hola ! \ n" ; ;
2 hola !
3 − : u n i t = (

)

5 Secuencias

En ocaml la sucesion se nota “;” (punto y coma) y se usa para dar varias ordenes seguidas.
Ejemplo:

1 # p r i n t _ i n t 3 ; p r i n t newline
2 3
3 −: u n i t = (

)

Código 9: Ejemplo de secuencia

( ) ; ;

2
























los ; se pueden encadenar: exp1; exp2; exp3; ... ;expn
Ejercicio: Escribir una función que recibe una cadena y que imprime esta cadena entre dos líneas blancas.

imprime c = print_newline

1 #l e t
2 p r i n t _ s t r i n g c ;
3 print_newline
4 print_newline

( ) ;
( ) ; ;

Código 10: Resolución del ejercicio
( ) ;

:= ! i +1; ( e s t e punto y coma es o p c i o n a l )

( se puede e s c r i b i r

tambien como i n c r

i )









6 Ciclos

Sirve para repetir una secuencia de cálculos muchas veces.

6.1 Ciclo while
En ocaml: While condicion do exp done
Ejemplo: (Factorial)

Código 11: Factorial de un número

r e c f a c t = 0 −> 1 | n −> n∗ f a c t (n− 1 ) ; ;

i = r e f 1 and p = r e f 1 i n

1 #l e t
2 n!=1 x2x3x4x . . . x n
3 #l e t
f a c t n = l e t
4 while ! i <= n do
5 p := ! p∗ ! i ;
6
7 done ;
8

! p ; ;

i

Ejercicio: Escribir la función M.C.D. Con el estilo imperativo.

Código 12: Máximo común divisor

1 mcd ( a ,0)= a
2 mcd( a , b)=mcd (b , a mod b )
3 En ocaml :
4 #l e t mcd a b = l e t x= r e f a and l e t y= r e f b in
5 while ! y != 0 do
6
temp = ! x i n
7 x :=! y ;
8 y:=temp mod ! y ;
9 done ;
10

! x ; ;

l e t



6.2 Ciclo for
Cuando un índice involucra un índice, es más práctico usar el ciclo for.
for indice = val1 to val2 do exp done
Por ejemplo para el factorial:

Código 13: Factorial de un número



f a c t n= l e t p= r e f 1 i n
i= 1 to n do

l e t
f o r

1
2
3 p:= ! p∗ i
4 done ;
5

! p ; ;



7 Arreglos (vectores o tablas)

| 0 | 1 | 2 | 3 | 4 | ... | n-1 |
Ejemplo:

3





















Código 14: Modificando contenido de referencias

i n t array = [ | 6 ; 5 ; 8 | ]

1 #l e t v = [ | 6 ; 5 ; 8 | ] ; ;
2 v a l v :
3 Otra forma :
4 #l e t v2 = array . make 6 4 ; ;
5 v a l v2 = i n t array = [ | 4 ; 4 ; 4 ; 4 ; 4 ; 4 | ]



• la función array.make a b crea un arreglo de tamaño a con todos los valores iguales a b.
• la función array.length permite conocer la longitud de un arreglo.

#array.lenght v;;
-: int 3

Para consultar las casillas:
Globalmente:

#v;;
-: int array = [|6;5;61|]

Individualmente:

#v.(0);;
-:int = 6
#v.(2);;
-: int =8;;
#v.(-2);;
exepcion: invalid argument “index out of bounds”

Ejemplo:
Calcular el elemento más pequeño de un arreglo

Código 15: Elemento más pequeño de un arreglo



e l s e min ( t . ( i ) )

r e c min_vect2 v i

1 #l e t
2
3 #l e t min vect v= l e t n= array . l e n g t h v in
4
5

i f n = 0 then f a i l w i t h " a r r e g l o ॷ v a c i o "
e l s e min vect2 v 0 (n− 1 ) ; ;

( min : vect2 v ( i +1) j ) ; ;

j = i f

i = j

then t . ( i )

Modificación de casillas:
Se usa

v.(i) <- exp

para modificar la casilla i de v
Ejemplo:

Código 16: Modificando casillas






1 #v . ( 1 ) <− 1 0 ; ;
2 #v ; ;
3 −:

i n t array = [ | 6 ; 1 0 ; 8 | ]

4















8 Cadenas de caracteres como vectores

Una cadena (string) puede ser ”vista“ como un vector de caracteres, las operaciones de creación, acceso, modificación
son parecidas a las de los vectores pero como string es diferente que char array, la sintaxis es distinta: los paréntesis
se cambian a corchetes cuadrados.
Ejemplo:



Código 17: Cadenas como vectores

5



)

s= " Hola ॷ Roberto "
s= s t r i n g= " Hola ॷ Roberto "

1 #l e t
2 v a l
3 # s . [ 1 1 ] <− ’ a ’ ; ;
4 −: u n i t = (
5 # s ; ;
6 −: s t r i n g = " Hola ॷ Roberta "
7 S t r i n g . make 10 ’B’
8 −:
9 # S t r i n g . l e n g t h s
10 −: i n t = 12

s t r i n g = "BBBBBBBBBB"



9 Matrices

Sea M una matriz nxp, n lineas y p columnas. Podemos ver M como un vector de n lineas cada linea siendo como un
vector de p elementos. Su tipo es int array array No hay sintaxis particular a las matrices, sin embargo existe una
función de creación:

Array.make_matrix

Ejemplo:



Código 18: Ejemplos de matrices

i n t = 3

[ | 4 ; 5 ; 6 | ] | ] ; ;

i n t array array= [ | [ | 0 ; 0 ; 0 | ] ; [ | 0 ; 0 ; 0 | ] | ]

1 # l e t m1 = [ | [ | 1 ; 2 ; 3 | ] ;
2
3 # l e t m2=Array . make_matrix 2 3 0 ; ;
4 matriz ( 000
5 000)
6 −:
7 # m1 . ( 0 ) . ( 2 ) ; ;
8 −:
9 # Array . l e n g t h m1 ; ;
10 −:
11 # Array . l e n g t h m1 . ( 0 )
12 −:
13 ( numero de f i l a s )
14 ( numero de elementos de una f i l a , o sea numero de columnas )
15 # m. ( 1 ) . ( 0 ) <− 7 ; ;
16 # m1 ; ;
17 −:

i n t array array = [ | [ | 1 ; 2 ; 3 | ] ; [ | 7 ; 5 ; 6 | ] | ] ; ;

i n t = 2

i n t = 3



10 Ciclos y vectores



Ejemplo: escribir una función para imprimir las cadenas de un vector entre comas.

Código 19: Ejemplo de vectores

[ | "uno" ; " dos " " t r e s " | ] ; ;

imprimir_comas v =

l e t n=Array . l e n g h t v in
f o r

1 Imprimir_comas
t r e s
2 uno , dos ,
3 −: u n i t = (
)
4 # l e t
5
6
7 p r i n t _ s t r i n g v . ( i ) ;
8 p r i n t _ s t r i n g " , "
9 done ;
10 p r i n t _ s t r i n g v . ( n−1);
11 print_newline (

i =0 to n−2 do

) ; ;



Ejercicio: Escribir una función que calcule el producto escalar de 2 vectores. Ejercicio: Escribir una función que
imprime una matriz a la pantalla en forma rectangular. Ejercicio: Escribir una función que calcula el producto de
dos matrices


















in

in

l e t prodcto_matrices a b=
l e t
l a=Array . l e n g t h a i n
l e t ca=Array . l e n g t h a . ( 0 )
l e t
l b=Array . l e n g t h b i n
l e t cb=Array . l e n g h t b . ( 0 )
i f
ca=l b then
l e t c=Array . make_matrix l a l c 0 .
i =0 to la −1 do
f o r
j=0 to cb−1 do
f o r
f o r k=0 to ca−1 do

1
2
3
4
5
6
7
8
9
10
11 c . ( i ) . ( j )+a . ( i ) . ( k )∗ . b . ( k ) . ( j ) ;
12 done ;
13 done ;
14 done ;
15

; ;

Código 20: Producto de matrices

i n

6




  • Links de descarga
http://lwp-l.com/pdf1236

Comentarios de: Resumen del estilo imperativo de Ocaml (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad