martes, 26 de febrero de 2019

1.2.4 FUNCIONES

1.2.4 Funciones


EL concepto de función tiene su origen en el término latino functĭo. La palabra puede ser utilizada en diversos ámbitos y con distintos significados.

Por otra parte, una función matemática es la correspondencia o relación f de los elementos de un conjunto A con los elementos de un conjunto B. Una función cumple con la condición de existencia (todos los elementos de A están relacionados con los elementos de B) y con la condición de unicidad (cada elemento de A está relacionado con un único elemento de B).

En la informática, más precisamente en los lenguajes de programación, una función es un tipo de subalgoritmo que describe una secuencia de órdenes. Estas órdenes cumplen con una tarea específica de una aplicación más grande.

Un problema complejo se puede dividir en pequeños subproblemas mas sencillos. Estos subproblemas se conocen como “Módulos” y su complementacion en un lenguaje se llama subprograma (procedimientos y funciones).
Un subprograma realiza las mismas acciones que un programa, sin embargo, un subprograma lo utiliza solamente un programa para un propósito especifico.
Un subprograma recibe datos de un programa y le devuelve resultados (el programa “llama” o “invoca” al subprograma, este ejecuta una tarea especifica y devuelve el “control” al programa que lo llamo).
Función: Una función en matemáticas, es una operación que toma un o mas valores (argumentos) y devuelve un resultado (valor de la función para los argumentos dados). Por ejemplo:
F(X) = X / (1+X2)
Donde:
F ………….. Nombre de la función
X …………. Es el argumento (también conocido como parámetro formal)
Definición de funciones: Una definición de función se presenta de la siguiente manera:
Función nombre_funcion (p1, p2, …, pn)
Inicio
Bloque de instrucciones
Fin
Donde:
Función …………… Es la palabra clave que nos indica una definición de función.
Nombre_funcion ….. Es el identificador con el cual se reconoce a la función en el cuerpo del
algoritmo principal.
P1,p2,…,pn ……… Es el grupo de parámetros que define a la función.
Llamado a una función
Cuando definimos una función solo le indicamos al algoritmo que esta función existe, pero una definición de función no implica la realización de las instrucciones que la constituyen. Para hacer uso de una función, el algoritmo principal la debe llamar. Por ejemplo:
Función F(X)
Inicio
F = X /(1 + X^2)
Fin
Inicio
Imprimir “Este es el algoritmo principal”
Leer N
R = F(N) llamado de la función
Imprimir “El resultado de la función es:”,R
Fin

1.2.3 DISCIPLINA DE TIPOS

1.2.3 Disciplina de tipos.


ž“Los tipos se infieren, es decir se comprueban, de forma estática, en tiempo de compilación.”
En los lenguajes de programación con disciplina de tipos, cada tipo representa una colección de valores o datos similares. El conocer los tipos de las funciones ayuda a documentar los programas y evitar errores en tiempo de ejecución.
Un lenguaje tiene disciplina de tipos si los errores de tipos se detectan siempre  es necesario determinar los tipos de todos los operandos, ya sea en tiempo de compilación o de ejecución
·         Pascal
• Cercano a tener disciplina de tipos pero no realiza comprobación de tipos en los registros variantes (incluso puede omitirse la etiqueta discriminatoria en dichos registros)
·         Ada
• Resuelve el problema de los registros variantes realizando comprobación dinámica de tipos (sólo en este caso)
• Tiene una función de biblioteca que permite extraer un valor de una variable de cualquier tipo (como una cadena de bits) y usarlo como un tipo diferente (no es una conversión de tipos)  se trata de una suspensión temporal de la comprobación de tipos
·         C
• No tiene disciplina de tipos por:
− No se realiza comprobación de tipos sobre las uniones
− Permite funciones con parámetros sobre los que no se realiza comprobación de tipos
·         Java
• Tiene disciplina de tipos (no hay uniones)
·         ML y Haskell
• Poseen disciplina de tipos
• Los tipos de los parámetros de las funciones (y de estas mismas) se conocen en tiempo de compilación (ya sea por declaración del usuario o por inferencia de tipos)
Haskell y otros lenguajes funcionales utilizan el sistema de tipos de Milner, que tiene dos características fundamentales:
·         Disciplina estática de tipos: Los programas bien tipados se pueden conocer en tiempo de compilación. Un programa bien tipado se puede utilizar sin efectuar comprobaciones de tipo en tiempo de ejecución, estando garantizado que no se producirán errores de tipo durante el computo.
·         Polimorfismo: Permite que una misma función se pueda aplicar a parámetros de diferentes tipos, dependiendo del contexto en el que la función se utilice.

jueves, 21 de febrero de 2019

1.2.2 TIPOS DE DATOS



1.2.3 TIPOS DE DATOS
En Haskell nos encontramos con diferentes tipos simples como:
·         Int 
·         Integer
·         Char
·         Bool 
Lógicamente podemos construir listas, tuplas y funciones con esos tipos de datos. Otro tipo que tenemos presente en Haskell es el tipo polimórfico. Así podemos construir estructuras y funciones polimórficas.
Dentro de las características de los tipos de Haskell podemos deducir que cada expresión tiene un único tipo principal y que ese tipo principal se puede deducir automáticamente. Además, Haskell incorpora las funciones sobrecargadas que se pueden aplicar sobre varios tipos pero no sobre todos los tipos. Para ello se dispone de una jerarquía de clases de tipos con operadores y funciones sobrecargadas como:
·         Num: Tipos numéricos.
·         Eq: Tipos que se pueden comparar.
·         Ord: Tipos que se pueden ordenar.
En la siguiente figura podemos encontrar un diagrama sobre la jerarquía de clases: 

Tipos De Datos
Todos los datos tienen un tipo asociado con ellos. Un dato puede ser un simple carácter, tal como `b’, un valor entero tal como 35. El tipo de dato determina la naturaleza del conjunto de valores que puede tomar una variable.
·         Numéricos
·         Simples Lógicos
·         Alfanuméricos (string)
·         Tipos de datos Arreglos (Vectores, Matrices)
·         Estructurados Registros (Def. por el Archivos usuario) Apuntadores
Tipos de Datos Simples
·         Datos Numéricos: Permiten representar valores escalares de forma numérica, esto incluye a los números enteros y los reales. Este tipo de datos permiten realizar operaciones aritméticas comunes.
·         Datos Lógicos: Son aquellos que solo pueden tener dos valores (cierto o falso) ya que representan el resultado de una comparación entre otros datos (numéricos o alfanuméricos).
·         Datos Alfanuméricos (String): Es una secuencia de caracteres alfanuméricos que permiten representar valores identificables de forma descriptiva, esto incluye nombres de personas, direcciones, etc. Es posible representar números como alfanuméricos, pero estos pierden su propiedad matemática, es decir no es posible hacer operaciones con ellos. Este tipo de datos se representan encerrados entre comillas.

INFORMACIÓN TIPO OBJETO
Los tipos de datos elementales en Prolog son los enteros y átomos. 
Los enteros se escriben en la forma usual, como una secuendia de digitos decimales precedidos posiblemente por un signo.
Un atomo puede ser cualquier secuende de simbolos del conjunto caracteres ASCII y hace el papel de una constante no evaluada o una cadena de caracteres. Los siguientes son ejemplos de atomos en Prolog;
Alfa———————> Nombre                     Integral                   Abuelo

1.2.1-EVALUACIÓN DE EXPRESIONES EN DIFERENTES LENGUAJES


1.2-EVALUACIÓN DE EXPRESIONES
¿QUE SON LAS EXPRESIONES?
·         Son el método fundamental que tiene el programador de expresar computaciones.
·         Las expresiones están compuestas de operadores, operandos, paréntesis y llamadas a funciones. Los operadores pueden ser:
·         Unarios: Cuando tan solo tienen un operando. Son operadores prefijos.
·         Binarios: 2 Operandos. Son operadores infijos.
·         Ternarios: 3 operandos.
ORDEN DE LA EVALUACIÓN DE LOS OPERADORES.
·         El orden en que se evalúan los operandos viene dado por unas reglas:
·         Reglas de procedencia
·         Reglas de asociatividad
·         Uso de paréntesis
EVALUACIÓN DE EXPRESIONES
Toda expresión regresa un valor. Si hay más de un operador, se evalúan primero operadores mayor precedencia, en caso de empate, se aplica regla asociatividad
Para evaluar una expresión no hay que hacer nada del otro mundo, pues es bien sencillo. Sólo hay que saber sumar, restar, si un número es mayor que otro
Hay tres reglas de prioridad a seguir para evaluar una expresión:
·         Primero, los paréntesis (si tiene)
·         Después, seguir el orden de prioridad de operadores
·         Por último, si aparecen dos o más operadores iguales, se evalúan de izquierda a derecha.
Las expresiones son secuencias de constantes y/o variables separadas por operadores válidos.
Se puede construir una expresión válida por medio de :
1. Una sola constante o variable, la cual puede estar precedida por un signo + ó – .
2. Una secuencia de términos (constantes, variables, funciones) separados por operadores.
Además debe considerarse que:
Toda variable utilizada en una expresión debe tener un valor almacenado para que la expresión, al ser evaluada, dé como resultado un valor.
Cualquier constante o variable puede ser reemplazada por una llamada a una función.
Como en las expresiones matemáticas, una expresión en Pascal se evalúa de acuerdo a la precedencia de operadores
JERARQUÍA DE OPERADORES
El orden general de evaluación de los operadores de una expresión va de izquierda a derecha, con la excepción de las asignaciones que lo hacen de derecha a izquierda.
Podemos seguir las siguientes tres reglas de evaluación de expresiones:
(Regla 1) En todas las expresiones se evalúan primero las expresiones de los paréntesis más anidados (interiores unos a otros); y éstos modifican la prioridad según la cantidad de éstos, los cuales tienen que estar balanceados (el mismo número de paréntesis que abren debe ser igual al número de los paréntesis que cierran).
(Regla 2) Todas las expresiones se evalúan tomando en cuenta la jerarquía de los operadores.
(Regla 3) Todas las expresiones se evalúan de izquierda a derecha.
¿QUÉ HACEN LOS LENGUAJES DE PROGRAMACIÓN AL RESPECTO?
C permite evaluación de circuito corto con los operadores booleanos.
PASCAL no permite evaluación de circuito corto. No se pueden usar sentencias del siguiente tipo:
A:array[1..10] of integer;
If (i<=10) and (a[i]>0) then
Porque se accede a una posición no válida de un array.
ADA: “and”, “or” no son operaciones de circuito corto y “or them” y “and them” si son operaciones de circuito corto.
If (i<=10) and them (a[i]>0) them
Tabla de evaluación de C++



Tabla de evaluación de Java

Como contenido auxiliar les dejamos este vídeo sobre el mismo tema

4.9 Predicados mitologicos

4.9 Predicados mitologicos El siguiente ejemplo muestra como se extrae functor y aridad: ?- functor ( termino (arg(1)),Functor,A...