Introducción a OCaml. October 19, 2015

Documentos relacionados
Metodologías de Programación II Introducción a OCaml

Introducción a Haskell. Cecilia Manzino

8 INTRODUCCIÓN AL OBJECTIVE CAML

Tipos en Haskell. Cecilia Manzino

9 DECLARACIÓN DE TIPOS Y PATRONES

Tema 4: Definición de funciones

Tema 4: Definición de funciones

Tema II: Introducción al Lenguaje Funcional

Paradigma Funcional Caso de estudio: ML. Lenguajes de Programación 2017

Tipos algebraicos y abstractos. Algoritmos y Estructuras de Datos I. Tipos algebraicos

Programación Funcional Haskell Clase 22

Paradigma Funcional Caso de estudio: ML. Lenguajes de Programación 2018

Introducción a Haskell. El lenguaje Haskell

Tema 2: Introducción a Haskell

Tema 3: Tipos y clases

Tema 3: Tipos y clases

Tema 3: Tipos y clases

Tema 3: Tipos y clases

Metodologías de Programación II Introducción

Tema 3. Patrones y Definiciones de Funciones

Isabelle como un lenguaje funcional

Tema 2. Tipos predefinidos

Práctica 1. Programación Funcional Introducción a Helium

Tema 3. Patrones y Definiciones de Funciones

Laboratorio de Lenguajes de Programación Introducción al lenguaje ML

Tema 9: Declaraciones de tipos y clases

Funciones Segunda parte

Curso de Java Introducción a la Programación II

Programación Funcional

Tema 6: Programación funcional en Scala. Sesión 18: Programación funcional en Scala

Tema 9: Declaraciones de tipos y clases

El lenguaje C. 1. Identificadores, constantes y variables

En programación funcional no hay instrucciones de asignación; La evaluación de un programa funcional no tiene efectos colaterales; y

Listas y Recursión. Taller de Álgebra I. Primer Cuatrimestre de 2015

Algoritmos y programas. Algoritmos y Estructuras de Datos I

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

EXPRESIONES Y OPERADORES

GUÍA BÁSICA DE SCHEME v.4

Tema 1 INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN

Java. Introducción a la Programación Orientada a Objetos

Curso de Java Introducción a la Programación III

Introducción a la programación. Cecilia Manzino

Laboratorio Análisis Lógico Práctica 2: Tipos de datos en Haskell

INTRODUCCIÓN AL ANÁLISIS ASCENDENTE. V id asig num. La siguiente figura muestra la tabla de análisis SLR de la gramática anterior:

abril de 2017 Desarrollo de aplicaciones en Java Tipos de datos primitivos Tipos de datos Elementos de aplicaciones simples

Programación Funcional Haskell Clase 19

Ficha de Aprendizaje N 13

Lenguajes de Programación Programación funcional

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación.

VARIABLES, CONSTANTES Y EXPRESIONES ASIGNACIÓN. TIPOS ELEMENTALES. PRECEDENCIA DE LOS ESTRUCTURAS DE CONTROL. CONDICIONAL E

Comprender las diferencias entre tipos de datos primitivos similares, y aprender a elegir el tipo más conveniente en cada caso.

Programación Declarativa Haskell Informática Sistemas Curso Pepe Gallardo Universidad de Málaga. Tema 8. Listas

Paradigmas de Programación. Práctica 3. Árboles estrictamente binarios

UNIDAD IV Programación Funcional. Lic. Jesús Germán Andrés PAUTSCH - FCEQyN - UNaM

GUÍA DE TRABAJO N 1 C# Ing. Néstor Raúl Suarez Perpiñan Página 1 de 13

Datos Elementales y formato de un programa en Java

Introducción al lenguaje C

Tema 4. Operadores y Expresiones

FUNDAMENTOS DE INFORMÁTICA

Introducción a los Algoritmos Tipos, Funciones y Patrones

Estatutos de Control C# Estatutos de Decisión (Selección)

CAPÍTULO IV: 4.1 Introducción a la. Programación Funcional

ÁRBOLES DE SINTAXIS. Los nodos no terminales (nodos interiores) están rotulados por los símbolos no terminales.

Introducción rápida a la programación (estructurada ) con C++

Un calculadora avanzada... y algo más!

Programación estructurada (Tipos, operadores y expresiones)

4. Operadores Operador asignación

DESCRIPCIÓN DEL LENGUAJE DE PROGRAMACIÓN P-0

Módulo. = Asignación = = Comp. de igualdad!= Com. de desigualdad <= Comp. menor o igual >= Comp. mayor o igual AND lógico OR lógica.

Introducción a los Algoritmos Validez, Satisfactibilidad, Tipos y Funciones

Fundamentos PHP. El término puntuación nos referimos a la sintaxis usada en PHP para la terminación de una línea de código (;)

Operadores y reglas de precedencia

Estructura de un programa en Java. Tipos de datos básicos. class miprimerprograma{ // comentario, no es parte del programa

INFOTECH MÓDULO 3 CURSO. Sintaxis del lenguaje de programación JAVA. Lógica y Lenguaje de Programación

Introducción a PL/SQL

Principios de Computadoras II

Introducción a C++ Algoritmos y Estructuras de datos II Dra. Carmen Mezura Godoy. Febrero 2009

Lenguaje de Programación: C++ Repaso de Material C++

XDR: Estándar de Representación Externa de Datos

Apunte Laboratorio ALPI - El lenguaje de programación Pascal

Guía 1: Funciones, precedencia y tipado

Cálculo Lambda Lenguajes Aplicativos puros Un Lenguaje Aplicativo con referencias y asignación Lenguajes y Compiladores

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Tema 12: Analizadores sintácticos funcionales

Lenguajes funcionales: λ-cálculo

Programación funcional

Tema 11: Analizadores sintácticos funcionales

Práctica de constantes, expresiones y operadores. Programación en C 1

Lenguajes de Programación. Capítulo 4. Expresiones.

Programación con listas. El tipo lista

Procesadores de lenguaje Tema 5 Comprobación de tipos

Tema 5: Introducción a la programación funcional.

TEMA 2. LENGUAJE C. CONCEPTOS BÁSICOS Y PROGRAMACIÓN ELEMENTAL.

Instituto Tecnológico de Celaya

Programación 1 Tema 3. Información, datos, operaciones y expresiones

ANÁLISIS DESCENDENTE. Compruébese que la siguiente gramática es LL(1) sin modificarla.

Metodologías de Programación II Dominios y Excepciones

Lección 2 Introducción al lenguaje C

Programación Estructurada. Sesión 2:El lenguaje de programación C

Transcripción:

Introducción a OCaml October 19, 2015

OCaml: introducción Es un dialecto de ML. Lenguaje de programación funcional. Fuertemente tipado. Con inferencia de tipos. Polimórfico. [Página oficial: http://www.ocaml.org/ Listado de funciones por orden alfabético: http://caml.inria.fr/pub/docs/manualocaml/libref/index values.html

Expresiones simples A partir del promt (#) comienza una expresión, que ha de finalizar con (;;). # 4 + 5 ;; - : int = 9 Los comentarios van entre (* y *) # 4 + (* esto es un comentario *) 5 ;; - : int = 9

Tipos básicos unit: es el tipo más simple de OCaml, que contiene un elemento: (). int: enteros de precisión fija, entre 2 3 1 y 2 3 1 1. float: reales de precisión arbitraria. Ejemplos: 0.2, 2e7, 3.1415926, 31.415926E 1, 2 Los operadores aritméticos incluyen un (.) Funciones para transformar entero en real y viceversa: float of int, int of float # 4.0 +. 2e7;; - : float = 20000004. # 4.0 /. 2e7;; - : float = 2e-07 int_of_float 2.4;; - : int = 2 # float_of_int 2;; - : float = 2.

Tipos básicos char: caracteres # a ;; - : char = a # \120 ;; - : char = x # x ;; - : char = x # Char.code x ;; - : int = 120 # Char.chr 120;; - : char = x # \n ;; - : char = \n # \r ;; - : char = \r

Tipos básicos: string: cadenas de caracteres # "Hola y adios";; - : string = "Hola y adios" # String.length "Hola y adios";; - : int = 12 # String.sub "Hola y adios" 2 5;; - : string = "la y " # "Hola y adios".[2];; - : char = l

Tipos básicos bool: true, false Relaciones para comparar valores: devuelven true o false x = y, x == y, x! = y, x <> y x < y, x <= y, x >= y, x > y # 2 < 4;; - : bool = true # "Hola" > "Hasta luego";; - : bool = true # 2 + 6 = 8;; - : bool = true # 2 + 6 == 8;; - : bool = true # 1.0 = 1.0;; - : bool = true # 1.0 == 1.0;; - : bool = false

Tipos básicos Operadores lógicos: not, &&, # not true;; - : bool = false # 1 < 2 (1 / 0) > 0 ;; - : bool = true # 1 < 2 && (1 / 0) > 0 ;; Exception: Division_by_zero. # 1 > 2 && (1 / 0) > 0 ;; - : bool = false Condicional: if a then b else c # if 1 < 2 then 3+7 else 4;; - : int = 10

Variables y funciones Asignación: let nombre = expresión # let x = 1;; val x : int = 1 # let y = 4;; val y : int = 4 # let z = x + y;; val z : int = 5 Asignaciones anidadas: let nombre = expr1 in expr2 # let x = 8 in let y = 2 in x+y;; - : int = 10 # x;; - : int = 1

Variables y funciones Funciones # let siguiente = fun i -> i+1;; val siguiente : int -> int = <fun> # let siguiente i = i+1;; val siguiente : int -> int = <fun> # siguiente 6;; - : int = 7 Precedencia de las funciones # siguiente 2 * 3;; - : int = 9 # siguiente (2 * 3);; - : int = 7

Variables y funciones Funciones con varios argumentos: currificación # let suma x y = x + y;; val suma : int -> int -> int = <fun> # let suma = fun x -> (fun y -> x + y);; val suma : int -> int -> int = <fun> # let suma x = fun y -> x + y;; val suma : int -> int -> int = <fun> Parcialización # let siguiente = suma 1;; val siguiente : int -> int = <fun> # siguiente 4;; - : int = 5

Variables y funciones Funciones recursivas: let rec nombre= expresión # let rec factorial n = if n = 0 then 1 else n*(factorial (n-1));; val factorial : int -> int = <fun> # let rec potencia n x= if n = 0 then 1.0 else x*. (potencia (n-1) x);; val potencia : int -> float -> float = <fun> # factorial 10;; - : int = 3628800 # potencia 4 5.0;; - : float = 625.

Variables y funciones Funciones de orden superior: función derivada # let dx = 1e-10;; val dx : float = 1e-10 # let derivada f = fun x -> (f (x +. dx) -. f x) /. dx;; val derivada : (float -> float) -> float -> float = <fun> # let f1 = potencia 3;; val f1 : float -> float = <fun> # f1 10.0;; - : float = 1000. # let f1 = derivada f1;; val f1 : float -> float = <fun> # f1 10.0;; - : float = 300.000237984932

Funciones: definiciones mediante patrones Sintaxis: match expr with patron_1 -> expr1 patron_2 -> expr2... patron_n -> exprn Ejemplo: sucesión de Fibonacci # let rec fib n = match n with 0 -> 0 1 -> 1 n -> fib (n-1) + fib (n-2);; val fib : int -> int = <fun> # fib 10;;

Funciones: definiciones mediante patrones Expresiones alternativas # let rec fib n = match n with (0 1) -> n _ -> fib (n-1) + fib (n-2);; # let rec fib = function (0 1) as n -> n n -> fib (n-1) + fib (n-2);; val fib : int -> int = <fun> # let rec fib = function n when n < 2 -> n n -> fib (n-1) + fib (n-2);;

Tuplas Se corresponden con el producto cartesiano. # let p = 1, "Hola";; val p : int * string = (1, "Hola") # fst p;; - : int = 1 # snd p;; - : string = "Hola" # let x, y = p;; val x : int = 1 val y : string = "Hola" # let segundo (_,y,_) = y;; val segundo : a * b * c -> b = <fun> # segundo (1, 4.5, "hola");; - : float = 4.5

Listas Sucesión de elementos del mismo tipo. # [1;2;3;5];; - : int list = [1; 2; 3; 5] Constructores: [], (::) let xs = [1;2;3;5] in 7::xs;; - : int list = [7; 1; 2; 3; 5] Operaciones: length hd tl nth rev append concat

Definiciones de tipos de datos Sintaxis type nombre = Identificador_1 of tipo_1... Identificador_n of tipo_n Ejemplo: árbol binario con nodos enteros # type arbol = Hoja Nodo of int * arbol * arbol;; type arbol = Hoja Nodo of int * arbol * arbol # let ej1 = Hoja;; val ej1 : arbol = Hoja # let ej2 = Nodo (1, Hoja, Hoja);; val ej2 : arbol = Nodo (1, Hoja, Hoja) # let ej3 = Nodo (4, ej2, ej1);; val ej3 : arbol = Nodo (4, Nodo (1, Hoja, Hoja), Hoja)

Definiciones de tipos de datos Árboles binarios # type a arbol = Hoja Nodo of a * a arbol * a arbol;; type a arbol = Hoja Nodo of a * a arbol * a arbol Expresiones aritméticas: type expression = Var of string Const of int Add of expression * expression Mul of expression * expression;; let expr1 = Add(Mul(Const 2,Var "x"),var "y");;

Tipos de datos: fórmulas type ( a)formula = False True Atom of a Not of ( a)formula And of ( a)formula * ( a)formula Or of ( a)formula * ( a)formula Imp of ( a)formula * ( a)formula Iff of ( a)formula * ( a)formula Forall of string * ( a)formula Exists of string * ( a)formula;;