Google
 

miércoles, octubre 25, 2006

OCaml

OCaml es un extraño lenguaje que soporta tanto estilos de programación funcionales como imperativos u orientados a objetos.

Esta es una pequeña función de ejemplo que compara dos listas y retorna verdadero si son iguales:
1 let rec compara l1 l2 =
2 match l1, l2 with
3 | h1 :: t1, h2 :: t2 -> if h1 != h2 then false else compara t1 t2
4 | [], [] -> true
5 | _ -> false
Línea 1: Definimos la función compara con dos paremetros l1 y l2, además le indicamos que es una función recursiva (rec).
Línea 2: Match es algo parecido al switch del C pero mucho más potente, hacemos un match con las dos listas.
Línea 3: Comparamos si la cabecera de las dos listas (h1 y h2) son diferentes en cuyo caso devolvemos un falso. Si no, llamamos recursivamente la función con la cola de las dos listas (t1, t2).
Línea 4: Si las dos listas han llegado vacias hasta aquí es que son iguales.
Línea 5: Para el resto de casos (el tamaño de las listas es diferente) retornamos falso.

Espero que os haya entrado el gusanillo de mirar más cosas sobre OCaml.

4 comentarios:

Anónimo dijo...

Interesante, pero no me ha quedado claro donde se establece que h1 es la cabecera de l1 y t1 la cola de h1.

Victor M. dijo...

Si tengo una lista [1; 2; 3; 4] al hacer cabecera :: cola, cabecera contendra 1 y la cola [2; 3; 4]. Es asi gracias a los dos puntos dobles.

Anónimo dijo...

Me ha quedado una duda y no es precisamente del lenguaje. Cuando dice Linia te estas refiriendo a Linea o estoy entendiendo mal el texto.

Saludos

Victor M. dijo...

Eso es que se me escapa el catalán, ahora mismo lo arreglo.