Você está na página 1de 47

UNIDAD I

Conceptos fundamentales
1.1 Diferentes estilos de programacin
Los LP se pueden clasificar utilizando distintas
taxonomas.
Por el nivel de abstraccin:
Bajo nivel
Mediano Nivel
Alto Nivel
Por las estructuras de control:
Programacin imperativa
Programacin declarativa
1.1 Diferentes estilos de programacin
Por el estilo de programacin:
Programacin Lineal
Programacin Estructurada
Programacin Funcional
Programacin Lgica
Programacin concurrente
Programacin Orientada a Objetos
Programacin Orientada a Aspectos
Programacin en Paralelo
1.1 Diferentes estilos de programacin
Programacin funcional:
Paradigma de programacin declarativa basada en
funciones matemticas, que no permiten el cambio de
estado de los datos.
Programacin Lgica:
Paradigma de programacin declarativa basada en la
lgica de primer orden, tomando conocimiento
declarativo como base para construir nuevo
conocimiento utilizando el conocimiento procedural.
1.1 Diferentes estilos de programacin
Programacin estructurada

boolean par(int num){


boolean band;
band=num%2==0?true:false;
return band;
}
Programacin funcional

par num= even num


1.1 Diferentes estilos de programacin
Programacin Lgica:

par num :- r is num%2, r=0.


1.1 Diferentes estilos de programacin
Haskell es un lenguaje de programacin de
alto nivel, declarativo y funcional.
Los cambios de estado de la programacin
tradicional no existen.
No provee sentencias como la
programacin imperativa.
Un programa se ve como una serie de
transformaciones de datos.
1.1 Diferentes Estilos de programacin
Es un lenguaje tipificado estticamente.
Se inicio su desarrollo en 1987 y en 2003
se publica el informe de su primera versin
estable.
Actualmente existen 2 tipos de
compiladores una basado en GHC
(Glasgow Haskell Compilar) y otro basado
en Hugs.
1.1 Diferentes stilos de programacin
1.1 Diferentes estilos de programacin
1.1 Diferentes estilos de programacin
1.1 Diferentes estilos de programacin
1.1 Diferentes estilos de programacin
GHC puede trabajar de 2 formas:

Modo interactivo utilizando el interprete de Haskell


En modo interactivo se carga la consola de Haskell
y se cargan los mdulos con los cuales se pretende
trabajar.

Modo compilacin utilizando el traductor de Haskell.


En modo compilacin se traduce el cdigo para
generar un ejecutable del sistema operativo.
1.2 Analizando diferentes estilos de
programacin

Haskell
F#
Python
Scala
Clojure
Rust
Ocaml
1.2.1 Evaluacin de expresiones
Una expresin como en muchos lenguajes
esta formada por operadores, literales,
variable y/o funciones.
Las expresiones en Haskell se escriben en
notacin infija o notacin normalizada con
precedencia de los operadores.
Los operadores estn ajustados a tipos y
metatipos de datos.
1.2.2 Tipos de datos
Tipo de datos bsicos Operadores

Int e Integer +, -, *, ^, div, mod, abs, signum,


negate, even, odd, succ, pred

Float y Double +, -, *, /, **, ^^,abs, signum,


negate, sin, asin, cos, acos, tan,
atan, log, sqrt, succ, pred

Bool &&, ||, not, otherwise

Data.Char ord, chr, isUpper, isLower, isDigit,


isAlpha, toUpper, toLower, isSpace,
isControl, isAlphaNum, isPrint,
isOctDigit, isHexDigit, isLetter,
isPunctuation, isSymbol,
1.2.2 Tipos de datos
Los operadores son funciones, Haskell en modo
interactivo, se puede preguntar por el tipo de un dato, de
una expresin o funcin.

:type expresin

Type puede ser sustituido por una t


La expresin puede ser una literal, expresin o nombre
de funcin.
1.2.2 Tipos de datos
1.2.2 Tipos de datos
Metatipos (Clases de tipo) Significado

Eq Soporte para igualdad y desigualdad

Ord Soporte de rango de valores


ordenados, cardinalidad
Show Soporte para convertir a cadena

Num Soporte para operaciones bsicas


menos divisin
Integral Soporte para div y mod de los
enteros
Fractional Soporte de / para los flotantes
1.2.2 Tipos de datos
Operadores Relacionales Operadores

> Mayor que

< Menor que

<= Menor o igual que

>= Mayor o igual que

== Igual que

/= Diferente que

min max Mnimo y mximo


1.2.2 Tipos de datos
Toda expresin puede ser evaluada segn los argumentos y
como las funciones participantes estn definidas.

4+2

(+) 4 2

4 + 2+3

(+) 4 2+3

(+) 4+2 2+3


1.2.3 Disciplina de tipos
Haskell es un lenguaje altamente tipificado.
Se recomienda declarar una funcin antes
de su definicin de tal forma que se
explicite el tipo de esta y de sus
argumentos.
Haskell posee un mecanismo de inferencia
de tipos que cuando no se declara la
funcin Haskell infiere los tipos.
1.2.4 Funciones
Una funcin tiene nombre, argumentos si
es que los necesitamos y un cuerpo.
El nombre es un identificador que inicia con
letra minscula seguida de letras dgitos y
subrayado.
Los argumentos son identificadores
El cuerpo es una expresin que define la
funcin
1.2.4 Definicin de funcin

cuadrado x = x ** 2

cuadrado: Nombre de la funcin


x : Argumento de la funcin
x**2 : Cuerpo de la funcin

cuadrado :: Floating a => a ->a


1.2.4 Definicin de funcin

areaTriangulo b a = b * a / 2

Tipo de datos de la funcin?

Declaracin de la funcin?
1.2.4 Definicin de funcin
Cuando se requiere definiciones locales de funciones o la
repeticin de expresiones dentro de una funcin se utiliza
where.

sumCuadrados x y = cuad x + cuad y


where
cuad z = z * z
Ejercicis
Elabore funcin que dado un entero de 5
dgitos obtenga el dgito ms significativo.
Elabore una funcin que calcule el
permetro de un triangulo rectngulo del
cual se sabe la longitud de sus catetos.
Elabore una funcin que calcule la suma
de las races cuadradas de 2 nmeros que
son pasados como argumentos.
Condicionales
Se puede utilizar la expresin condicional if then else

if expresin then expresin else expresin

impar x = if odd x then True else False

mayor x y = if x > y then x else y

sucesivos a b c=if(b==a+1 && c=b+1) then True else False

Condicionales
La estructura case permite validar varias expresiones y
tomar decisiones, expR.. Son las posibles expresiones
resultados.

case exp of
exp1 -> expR1
exp2 -> expR2
exp3 -> expR3
:
[otherwise -> expRN]
Condicionales
Ejemplo:

getPatron color = case color of


blanco ->982
azul ->765
rojo->871
otherwise -> 999
Guardas
Las guardas (guard) son mecanismos que al igual que el
case permite describir expresiones de verificacin.

funcion argumento(s) | expr1 = exprR1


| expr2 = exprR2
| expr3 = exprR3
|otherwise = exprRN
Guardas
Ejemplo:

divSegura x y |y==0 = -1
|y<0 || x <0 = (abs x) / (abs y)
|otherwise =x /y

impar x |odd x =True


|otherwise = False
Recursin
Todo lenguaje funcional al no proveer estructuras de
control para la iteracin provee la recursin.
La recursin se define como la funcin que se invoca as
mismo.
Una funcin recursiva debe tener un punto de corte
donde termina la recursin.
La resolucin de problemas siguiendo el esquema
recursivo debe partir de la solucin base (mejor de los
casos).
El punto de corte se determina por la solucin base y la
forma recursiva por la generalizacin del resto de casos.
Recursin
Ejemplo

factorial n | n==0 = 1
|otherwise = n*factorial (n-1)

fibonacci n|n<2 =1
|otherwise= fibonacci (n-1)+fibonacci(n-2)
Ejercicios
Elabore funcin que dado un entero
indique si es mltiplo de 5 utilizando la
regla que todo nmero es mltiplo de 5 si
termina con 0 5.
Elabore una funcin que obtenga el total de
dgitos pares que tiene un entero. Por
ejemplo 35678 tiene 2 dgitos pares.
Elabore una funcin que obtenga de un
entero su complemento a 10.
Introduccin a Scala
Scala es un lenguaje orientado a objetos funcional.
Se ejecuta sobre la mquina virtual de java y sobre .NET
Framework
La parte funcional de scala, soporta datos inmutables y
mutables.
La mayora de las caractersticas de la programacin
funcional estn implementadas en Scala.
Puede funcionar de forma interactiva desde la lnea de
comandos, mediante scripts o mediante programa
compilados (traducidos).
Introduccin a Scala

Creado en la EPFL (Escuela Politcnica Federal de


Lausanne) en suiza desarrollado principalmente por
Martin Odersky.
De la PF ofrece:
Funciones de orden superior
Tipos algebracos
Polimorfismo parametrizado
De la POO ofrece:
Especializacin
Configuraciones dinmicas
Clases como abstracciones parciales
Introduccin a Scala
En modo interactivo:
Introduccin a Scala
En modo script:
Introduccin a Scala
En modo compilado:
Introduccin a Scala
Los tipos de datos bsicos en Scala son:
Introduccin a Scala
La literales numricas son: 32,43,-12,8.4,3e39
Los operadores aritmticos bsicos son: +,-,*,/,%
Se pueden utilizar las funciones matemticas
localizadas en math. Como math.pow, math.sin,
etc.
Los tipos extendidos numricos son BigInt y
BigDecimal
Introduccin a Scala
Los operadores relacionales: >,<,>=,<=,==,!=
45!=89 Hola==HOLA

Los operadores Lgicos: &&, ||, ! ! (45>91)


(32<21) || (Hola!=32)

Los operadores a nivel de bits. &, |, ~,^


45&14
Introduccin a Scala
Los Datos se pueden definir como literales y
variables:
Una literal en realidad es una constante, las
existen de cualquier tipo bsico.
Una variable puede ser definida inmutable (val) o
mutable (var).
En cualquiera de los 2 casos, su definicin puede
incluir tipo de datos y expresin.
Introduccin a Scala
Introduccin a Scala
Una funcin se define con la palabra reservada def.

def nombre [(argumentos)]= expresin

def nombre [(argumentos) =]{bloque}

Ejemplo:

def doble(x:Int)=x+x
def ultimoDigito(x:Int)= x%10
Introduccin a Scala
Una funcin puede definir su tipo de retorno

def funcion[(argumentos):tipo]=expresin
def funcion[(argumentos):tipo=]{bloque}

Ejemplos:
def fact(x:Int):BigInt= (1 to x).product

def fact(x:Int):BigInt= if (x==0) 1 else x*fact(x-1)

Você também pode gostar