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

Documentos relacionados
Lenguajes de Programación Programación funcional

Aplicación de la Inducción Matemática Programación Funcional. Julio Ariel Hurtado Alegría Departamento de Sistemas Universidad del Cauca

GUÍA BÁSICA DE SCHEME v.4

Programación Funcional Lisp-DrScheme Primera Parte. Dr. Oldemar Rodríguez Rojas Escuela de Informática Universidad de Nacional

4.7 Operaciones sobre Objetos en Scheme

4.7 Operaciones sobre Objetos en Scheme. Equivalencias y predicados de tipos, listas, números, caracteres, strings y vectores

Tema 2.- Expresiones y funciones

Tema 3: Características de la programación funcional. Sesión 5: El paradigma funcional (1)

4.5 Ligado de Variables en Scheme

Tema 3.- Predicados y sentencias condicionales

Programación Funcional Lisp-Scheme

Introducción a Haskell. Cecilia Manzino

Tema 3: Características de la programación funcional

4.3 Recursión en Scheme. Recursión simple y asignación

Programación Declarativa

4.3 Recursión en Scheme

Tema 4: Programación funcional avanzada en Scheme

Informática General 2016 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales

Programación Funcional en LISP Lógica para Ciencias de la Computación

Apunte Laboratorio ALPI - El lenguaje de programación Pascal

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

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Introducción a Python. Cecilia Manzino

Informática General 2018 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales

Principios de Computadoras II

El lenguaje C. 1. Identificadores, constantes y variables

Algoritmos y programas. Algoritmos y Estructuras de Datos I

Licenciatura de Matemáticas Informática I Notación algorítmica - Descripción BNF

Ficha de Aprendizaje N 13

Informática. JavaScript: Lenguaje de programación. Fco J. Martín Mateos Carmen Graciani

Tema 2. Concepto de Algoritmo

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

Tema#2. Tipos de Datos 10

Tema II: Introducción al Lenguaje Funcional

Informática General Cátedra: Valeria Drelichman Pedro Paleo Leonardo Nadel Norma Morales

Clase 2: El Lenguaje Python

PHP: Lenguaje de programación

Tema 2: Desarrollo de Algoritmos. E.E. de Algorítmica

$0 Representa al parámetro cero o nombre del programa $1 Representa al parámetro uno $2 Representa al parámetro dos

Semántica: principales usos. Semántica: principales enfoques. Semántica Operacional. Sintaxis abstracta de un lenguaje (sujeto) Semántica Operacional

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

Tema 4.- Recursión e iteración

DISEÑO ESTRUCTURADO USANDO HERRAMIENTAS DE

Repaso Lenguaje C Área de Servicios Programación (Ing. Elect. y Prof. Tec.), Programación I (TUG y TUR) y Electrónica programable (TUE)

Tema 2: Introducción a Scheme. Sesión 4: Introducción a Scheme (2)

CLIPS Definición de funciones

3.3 Conceptos Básicos del Lenguaje Java

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Componentes Básicos. InCo. InCo Componentes Básicos 1 / 28

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

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 (;)

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

Resumen de LISP. Javier Gil Julio, 2011

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

JavaScript: Operadores

Programación Orientada a Objetos Sentencias Java Parte I Ing. Julio Ernesto Carreño Vargas MsC.

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

Modelos de Desarrollo de Programas Y Programación Concurrente Clase N 3: 3 - Paradigmas de Programación

GLOSARIO 1. Qué es bit y byte? Bit: Es la unidad mínima de información. Puede ser 0 o 1. Byte: Es el conjunto de 8 bits. Ejemplo:

Escuela Normal Superior N 40 Mariano Moreno. Cuadernillo Propedéutico 2017 Nivel Superior

Tema: Estructuras de Selección en C#.

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

Programación n Orientada a Objetos Sentencias Java Parte I. Ing. Julio Ernesto Carreño o Vargas MsC.

2. EXPRESIONES 3. OPERADORES Y OPERANDOS 4. INDENTIFICADORES COMO LOCALIDADES DE MEMORIA

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

4. Operadores Operador asignación

Introducción a la Programación

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Laboratorio Análisis Lógico Práctica 1

Fundamentos de programación clase 1: Introducción a la programación

Algoritmo, Estructuras y Programación I Ing. Marglorie Colina

Tipos De Datos. Numéricos. Alfanuméricos (string) Arreglos (Vectores, Matrices) Estructurados Registros (Def. Por el Archivos Usuario) Apuntadores

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

Lenguaje de Diseño. Primera Parte. Resolución de Problemas y Algoritmos. Primer Cuatrimestre Ing. En Informática e Ing.

Prof. María Alejandra Quintero. Informática Año

Docente: Juan Carlos Pérez P. Alumno : Fecha : Nota:

Transcripción:

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

Programación Funcional Paradigma diferente a los imperativos, que se aleja de la máquina de von Neumann Basado en funciones matemática (notación funcional lambda de Church No existen realmente arquitecturas de computadores que permitan la eficiente ejecución de programas funcionales LISP es el primero, del cual derivan Scheme, Common LISP, ML y Haskell Funciones Matemáticas Un función es una proyección de un conjunto dominio a uno que es el rango f: D? R La evaluación de funciones está controlada por recursión y condiciones (imperativos lo hacen normalmente por secuencias e iteraciones Funciones matemáticas entregan siempre el mismo valor para el mismo conjunto de argumentos y, por lo tanto, no tiene efectos laterales. 2

Formas Funcionales (funciones de orden superior Toman funciones como parámetros y/o producen funciones como resultado Composición de Funciones h? f? g entonces: h(x? f(g(x Construcción. Lista de funciones que se aplican [f, g](x produce (f(x, g(x Aplicar a todo. Una función se aplica a lista arg.? (f, (x, y, z produce (f(x, f(y, f(z Fundamentos de la PF La PF pura no usa variables ni asignación Repetición debe ser lograda con recursión Un programa consiste de definición de funciones y aplicación de éstas La ejecución del programa no es nada más que la evaluación de funciones La transparencia referencial se refiere a que la evaluación de una función siempre produce el mismo resultado 3

Lenguajes Funcionales El lenguaje provee algunas funciones básicas, que son primitivas para construir funciones más complejas. Se definen algunas estructuras para representar datos en los parámetros y resultados de las funciones. Normalmente se implementan mediante interpretadores, pero también se pueden compilar. 4.2 Introducción al Lenguaje Scheme Sintaxis, listas, operadores básicos, expresiones lambda y definición de variables 4

Origen de Scheme Desarrollado en el MIT a mediados del 70 Es un dialecto de LISP Usado para enseñanza de programación Características: Pequeño con sintaxis y semántica simple Nombres tienen ámbito estático Funciones son entidades de primera clase Sintaxis Palabras claves Variables No es PF pura! Datos constantes (e.g. números; caracteres; strings; vectores, listas y símbolos citados Formas estructuradas Blancos y comentarios (después de ; 5

Identificadores Corresponden a palabras claves, variables y símbolos, que no son sensible a mayúsculas Se forman de: mayúsculas y minúsculas [ A.. Z, a.. z ] Dígitos [ 0.. 9 ] Caracteres [?!. + - * / < = > : $ % ^ & _ ] Identificadores no pueden comenzar con ningún número (i.e. dígito, +, - y.. Ejemplo de Identificadores X3 y?$!!! Abcd y AbcD 8id Son válidos Son el mismo no es válido 6

Constantes Básicas String: se escribe usando citado doble ( e.g. Un string es sensible a Mayusculas Un caracter precede de #\ e.g. #\a Un número puede ser entero, fraccionario, punto flotante y en notación científica e.g. -365, 1/4, 23.46, 1.3e27 Números complejos en coordenadas rectangulares y polares e.g. 2.7-4.5i +3.4@-0.5 Booleanos son los valores #f (falso y #t (verdadero Ambiente Interactivo de Scheme Corresponde al ciclo: leer, evaluar e imprimir (denominado REPL Read-Evaluate-Print-Load. Se ingresa la expresión, el sistema evalúa y entrega el resultado. Ejemplo: Hola Scheme => Hola Scheme (Toda constante evalúa en la misma constante Es posible cargar y salvar en un archivo para facilitar el proceso de desarrollo. 7

Listas Las listas se escriben con paréntesis redondos (a b c d Listas contienen elementos de cualquier tipo, y se pueden anidar (lambda (x (* n n Una función se escribe como una lista en notación prefija, correspondiendo el primer elemento de la lista a la función y los siguientes a los argumentos (+ 3 14 ;=> 17 Funciones Aritméticas Los nombres +, -, * y / son nombres reservados para las operaciones aritméticas. Funciones se escriben como listas en notación prefija: (+ 1/2 1/2 ;=> 1 (- 2 (* 4 1/3 ;=> 2/3 (/ (* 6/7 7/2 (- 4.5 1.5 ;=> 1.0 8

Evaluación de Listas Toda lista es evaluada, salvo que se especifique lo contrario con citación simple (quote quote es análogo a utilizar comilla simple (quote (a b c d ;=> (a b c d (a b c d ;=> (a b c d (a b c d ;=> ERROR ( a no es proc. Al no usar quote, Scheme trata de evaluar considerando en el ejemplo a a como variable de función (primer operando. Operadores Básicos de Listas car devuelve el primer elemento de la lista: (car (a b c d ;=> a cdr devuelve el resto de la lista (sin el primer elemento: Notar la función quote (comilla simple para indicar que a no es función. (cdr (a b c d ;=> (b c d 9

Estructura de una Lista Internamente una lista es tratada como una lista enlazada (en forma similar a C (A (B C D A B D C Constructores de Listas cons construye una nueva lista cuyo car y cdr son los dos argumentos: (cons a (b c d ;=> (a b c d (cons (car (a b c(cdr (a b c;=> (a b c (cons a b ;=>? list construye una lista con todos los argumentos (list a b c d ;=> (a b c d (list ;=> ( 10

Listas Impropias A B D E C (A (B C D. E? (A. ( (B. (C. (. (D. E Variables y Expresiones Let Let permite definir variable que se ligan a un valor en la evaluación de expresiones Notar que esto transforma scheme en un lenguaje funcional no puro Sintaxis: (let ((var1 val1 exp1 exp2 Ejemplo: (let ((x 2 (y 3 (* (+ x y (- x y => -5 Variables son sólo visibles dentro del cuerpo de LET! 11

Expresiones Lambda Permite crear un nuevo procedimiento Sintaxis: (lambda (var1 var2 exp1 exp2 Ejemplo: ((lambda (x (* x x 3 ;=> 9 Una expresión lambda es un objeto tipo procedimiento que no tiene nombre! Ejemplo: Expresión Lambda (let ((square (lambda (x (* x x (list (square 2 (square 3 (square 4 ;=> (4 9 16 12

Especificación de Parámetros Formales Lista propia de parámetros (var 1 var 2... var n ((lambda (x y (list x y 1 2 ;=> (1 2 Parámetros único var r ((lambda x (list x 1 2 ;=> ((1 2 Lista impropia de parámetros (var 1 var 2... var n. var r ((lambda (x. y (list x y 1 2 3 ;=> (1 (2 3 Definiciones de Nivel Superior Las variables definidas con let y lambda son sólo visibles en el cuerpo de las expresiones (local. Esto es análogo al concepto de ámbito El procedimiento define permite definir variables de nivel superior (global Definiciones de nivel superior permiten visibilidad en cada expresión donde no sean escondidas por otro ligado (e.g. Una variable definida con el mismo nombre mediante let oculta a la de nivel superior Notar que define corrompe aun mas la noción de la PF pura. 13

Ejemplo de uso de Define (define pi 3.1416 ;=> pi La ejecución es secuencial (define square (lambda (x (* x x ;=> square (square 3 ;=> 9 (let ((x 2(square 4 (* x square ;=> 8 Abreviación en Definición de Funciones La forma: (define var 0 (lambda (var 1 var n e 1 Se puede abreviar como: (define (var 0 var 1 var n e 1 Ejemplo: equivale a: (define square (lambda (x (* x x (define (square x (* x x En general se utiliza la segunda visión 14

Expresiones Condicionales En Scheme también es posible condicionar la realización de determinada tarea Sintaxis: (if test consecuencia alternativa Ejemplo: (define (abs n (if (> n 0 n (- 0 n (abs -27 ;=> 27 Predicados Procedimientos para expresiones relacionales =, <, >, <= y >= Procedimientos para expresiones lógicos or, and y not e.g. (= 3 4 => #f e.g. (and (> 5 2 (< 5 10 => #t 15

Otros Predicados Lista nula: null? (null? ( => #t Argumentos equivalentes: eqv? (eqv? a a => #t Ejemplo: Notar que error es una función (define (reciproco n (if (and (number? n (not (= n 0 (/ 1 n (error reciproco reciproco: división no válida Expresión Condicional Múltiple Scheme provee expresiones que se evalúan condicionalmente. Sintaxis: (cond (test1 exp1 (test2 exp2 (else exp n El uso de else es opcional, siendo equivalente su uso a colocar #t Esto es análogo a switch en C o Java 16

Ejemplo de Condicional Múltiple (define abs (lambda (x (cond ((= x 0 0 ((< x 0 (- 0 x (else x Un ejemplo más complicado (define nota (lambda (cert lect tar (let ((a ((lambda (c (cond ((< c 45 0 ((> c 60 0.3 (else (/ (* 0.3 (- c 45 15 cert (display "alfa: " (display a (newline (+ (* a tar(* (- 1 a (+(* 0.75 cert (* 0.25 lect (nota 52.5 60 100 alfa:.15 ;=> 61.21875 17

Algo más sobre Predicados Cualquier objeto se interpreta como #t La lista nula ( equivale a #f Se definen los predicados: pair? : verifica si es un par (lista propia o impropia number? : verifica si es número string? : verifica si es un string 18