290 likes | 585 Views
PARADIGMAS DE PROGRAMACIÓN. José Oscar Mugetti Mare 2do. Año Ing. En Sistemas de Información U.T.N. - Facultad Regional San Francisco. TEMA: Especificación de algoritmos funcionales. Identificadores. Especificación con condiciones. Especificación funcional operacional.
E N D
PARADIGMAS DE PROGRAMACIÓN José Oscar Mugetti Mare 2do. Año Ing. En Sistemas de Información U.T.N. - Facultad Regional San Francisco
TEMA: Especificación de algoritmos funcionales • Identificadores. • Especificación con condiciones. • Especificación funcional operacional. • Sub-expresiones, condicional, recursividad, clases de recursividad, notación.
OBJETIVOS: • Introducir algunas características de la programación funcional. • Caracterizar el problema como una función entre conjuntos a ser definida. • Entender el concepto de “órden superior”, que autoriza a realizar abstracciones sobre funciones.
Metodologías y estrategias docentes • Metodología: • Lección magistral para introducir información conceptual • Duración: • 45 minutos • Recursos: • Proyecciones • Ejemplos
Recordatorio Paradigma funcional se basa en el concepto matemático de función: una función es una regla de correspondencia que asocia a cada elemento de un conjunto origen, un elemento del conjunto destino Muy adecuado ENTRE CONJUNTOS QUE DEBEN SER DEFINIDAS Funciones MODULARIZACION PROBLEMA
F(x) DOMINIO RANGO Aplicación de la función Recordatorio El paradigma funcional así como el lógico admiten el cálculo de teorías formales y el sustento de la programación es la matemática y la lógica.
Elementos básicos de especificación • Objeto predefinido: Forma parte de la definición del lenguaje. • Funciones: Un algoritmo es una descripción precisa y no ambigua de un método de transformación de unos valores iniciales en unos valores finales • Identificadores: Nombre que se le da a un objeto que aparece en una especificación
Identificadores IDENTIFICADORES Símbolos especiales predefinidos (Ej. “+”) SIMBÓLICO Formado por letras y dígitos. Pueden ser predefinidos o definidos por el usuario (Ej. Div, EsMínimo, Color_oscuro) ALFANU-MÉRICO
Identificadores • Especificación de un algoritmo: (Define ( (nombre de la función) (valor de la función)) ) Ejemplo
Identificadores (x) = argumento nominal de f - variable que denota valor genérico del dominio de la función. f(x) = 2* x + 1 Imagen del valor del argumento nominal • Estructura de definiciones en forma jerárquica • En cada definición las funciones utilizadas a la derecha se referencia por un nombre (con el cuál fue definida). • Problema complejo = combinación de problemas simples • Los módulos se referencian con el nombre y no se conoce su estructura interna • Nombres que no necesitan definición = “módulos primitivos” • Los no primitivos se denominan “abstractos”
Especificaciones • Especificación con condiciones: Expresa el problema por resolver, es decir que debe hacer la función • Especificación operacional: detalla como se resuelve el problema
Especificación con condiciones • Precondición: Definido para los valores de entrada • Postcondición: Definido para valores concretos de salida a partir de la precondición Ejemplo: Factorial de un nº entero 1 si n =o n (n-1)(n-2)...1 si n > 0 n! = Precondición: que n sea un número entero Postcondición: que devuelva un valor z = n!
Especificación con condiciones • Función parcial: Definida solamente para ciertos elementos de su dominio • Función Total: Definida sobre todo el dominio (generalmente éstas carecen de precondición) La precondición y la poscondición son sentencias lógicas cuyas únicas variables libres son los parámetros formales. Implícitamente estos parámetros están cuantificados universalmente
Funcional = función Se describe a partir de datos genéricos <cuerpo> Parámetros formales Encerrados entre ( ) Especificación funcional operacional • Describe un algoritmo y por lo tanto consta de una función <cabecera> Ejemplo
Especificación funcional operacional • Sintaxis única, escrita en metalenguaje • Los programas en Scheme no tienen “tipos”
Especificación funcional operacional • Definición de funciones: (Define (nombre función)(valor función)) (Lambda (x) ( * x x ) Podríamos así definir la función cuadrado: (Define cuadrado (lambda (x) (* x x) ) )
Especificación funcional operacional • Constantes: (define constante? number?) (define (deriva_constante x E) 0 ) • Variables: (define variable? symbol?) (define (deriva_variable x E) if (equal? x E) 1 0 ) )
Especificación funcional operacional • Condicionales: • number?Verifica si el argumento es un número • symbol? Verifica si el argumento es un símbolo • equal? Verifica si los argumentos son estructuralmente iguales
Especificación funcional operacional • Quote: es necesario para que las expresiones sean tratadas como datos (Define ejemplo ‘(+ 2 3) ) • Listas: Es una secuencia de cero o más valores, una lista se escribe encerrándola entre paréntesis; puede existir una lista vacía • la lista puede considerarse como una cabeza y el resto de la lista Ejemplo
Especificación funcional operacional • Operaciones sobre listas: • (null? X) Verdadera si la lista es vacía • (car x) El primer elemento de la lista no vacía • (cdr x) El resto de la lista luego del 1er. Elemento • (cons a x) Constructor de listas • Algunas funciones sobre listas: • Longitud • Agregar • Eliminar • Comparar • Invertir ...
Especificación funcional operacional • Función map: Función que hace cambio de los elementos de una lista mientras los copia • Funciónes de órden superior: Sus resultados son los parámetros reales utilizados para convocar a nuevas funciones
Subexpresiones Se utiliza la notación en las cuales existe el paréntesis alrededor del operador y sus operandos. Ejs.: ( 4 + ( 5 * 4) ) = 24 Proporciona así una sintaxis simple a costa de la proliferación de paréntesis SUBEXPRESIONES (paréntesis (entre paréntesis))
Condicional Elige entre dos valores posibles <condición> <expresión1> |<expresión2> con true la 1º con false la 2º Ejs: Función Max (x , y) if (> x y) x y
Notación • Notación infija: paradigma imperativo if b then v1 else v2 • Notación prefija: paradigma funcional if_then_else (b v1 v2)
Recursividad • Función definida en términos de sí misma (Define factorial Lamda (x) (if (equal? x 1) 1 ( * x (factorial (- x 1) ) ) ) ) • Valor del parámetro básico o elemental . Cuando llega allí la función no recurre • Cada recursividad debe afectar a parámetros que lo acerque al parámetro básico Ejemplo
Clases de recursividad • Recursividad lineal: El cuerpo de la función contiene una llamada recursiva • Recursividad no lineal: El cuerpo de la función contiene varias llamadas recursiva • Recursividad mutua: La función no contiene ninguna llamada recursiva, pero en la evaluación surgen llamadas recursivas
Clases de recursividad • Ejemplo de recursividad mutua: Función F (...) ... ... G (...) ... Función G (...) ... ... F (...) ...
No hay conclusión. ¿Que cosa ha concluido, con respecto a la cual podemos llegar a una conclusión? No hay fortunas que puedan predecirse, ni consejos que puedan darse. Adiós William James