Contenido del curso Fundamentos de Lenguajes de Programación

Texto completo

(1)

MC Mireya Tovar Vidal FCC- BUAP Cubículo 5 mtovar@cs.buap.mx Horario de atención: martes 11:00-12:00

Fundamentos de Lenguajes de

Programación

Contenido del curso

Cálculo lambda sin tipos

Cálculo lambda con tipos

PFC

Lenguaje de programación funcional

Bibliografía

Lambda Calculi with types

Henk Barendregt.

Handbook of Logic in Computer Science, Volume II.

Oxford University Press.

Foundations for Programming Languages,

J. C. Mitchell,

MIT Press, 1996

Evaluación

3 exámenes parciales 60%

Tareas y ejercicios 20%

(2)

Introducción

Un lenguaje de programación es un medio para comunicarse con una computadora que proporciona las facilidades necesarias para la programación

Imperativos Orientados a objetos Funcional Lógicos

Definición de un lenguaje

Sintaxis

Descripción del conjunto de secuencias de símbolos considerados como programas válidos.

Teoría de lenguajes formales bien desarrolladas (Chomsky)

Notación BNF Sistema de tipos

Propósito: prevenir errores en tiempo de ejecución

Análisis de tipos en tiempo de compilación

Análisis de tipos en tiempo de ejecución Semántica

Descripción del significado de instrucciones y expresiones

Formal: axiomática, operacional o denotacional.

Introducción

En 1936 se introdujeron dos modelos computacionales:

Alan Turing inventó la máquina de Turing y la noción de función computable en sus máquinas.

Alonzo Church inventó un sistema formal llamado Cálculo-λ

y la noción de función computable en su sistema.

Los lenguajes imperativos como Pascal, C, etc., así como el lenguaje ensamblador están basados en la máquina de Turing.

Los lenguajes funcionales como ML, Miranda, Haskell etc., están basados en el cálculo-λ.

Programación funcional

Proporcionan muchos recursos expresivos ausentes en otros LP: 1.Funciones como ‘ciudadanos de 1ª clase’

2.Sistema de tipos

3.Ausencia de efectos laterales, sin variables globales 4.Evaluación perezosa

Los programas funcionales son pequeños y fáciles de mantener

Los programas funcionales permiten utilizar técnicas de razonamiento formal

La capacidad computacional de los lenguajes funcionales es equivalente a la de la máquina de Turing

(3)

Calculo lambda

Objetivo

Introducir el cálculo-λy mostrar como este sistema captura todas

las funciones computables.

Sintaxis

Un término ese define como:

e ::= x (identificador) | e0e1 (aplicación) | λx. e (abstracción) En una abstracción: x es el argumento ees el cuerpo de la función

Ejemplo

Función identidad:

λ

x. x

El nombre después de λes el identificador del argumento de esta función.

La expresión después del punto es el “cuerpo” de la definición.

Término válido, correspondiente en Java public int id(int x){return x;}

Término válido, correspondiente en C: int id(int x){return x;}

Asociaciones

Si M, N son las expresiones

M ≡

λ

x.x N y

Respectivamente entonces

MN = (λx.x) y Y no

λx. ( x y )

LMN Se asocia hacía la izquierda ((LM)N)

λx. λy. M Se asocia hacia la derecha (λx. (λy. M))

λx. λy. xyz Una aplicación tiene precedencia sobre una abstracción

(4)

Ejercicios

Decidir si son términos bien formados y asociar

λ

x.

λ

y. xy

λ

z.z

λ

x.

λ

y.

λ

z.xzyz

λ

x.

λ

y.

λ

z.xz(yz)

λ

x.

λ

y.

λ

z.x(zy)z

Más reglas

Para simplificar la notación los siguientes términos se tomarán como equivalentes:

λ

x

1

.(

λ

x

2

.(…(

λ

x

n

.M)…)) es lo mismo que

λ

x

1

x

2

…x

n

.M

Simplificar:

λ

x.

λ

y. xy

λ

z.z

λ

x.

λ

y.

λ

z.xzyz

λ

x.

λ

y.

λ

z.xz(yz)

λ

x.

λ

y.

λ

z.x(zy)z

Expresiones y funciones

Expresiones x + y x + 2*y + z Funciones λx. (x+y) λz. (x + 2*y + z) Aplicación (λx. (x+y)) 3 = 3 + yz. (x + 2*y + z)) 5 = x + 2*y + 5 Parsing: λx. f (f x) = λx.(f (f (x)) )

Alcance

En calculo-λtodos los nombres son locales a las definiciones

λx.t : El alcance de xes el término t

Una ocurrencia de la variable xse dice que esta acotada cuando está ocurre en el cuerpo tde una abstracción λx.t

(

λ

x. y x)(

λ

y. x y)

acotada acotada libre

(5)

Variables libres y acotadas

En la función λx.x se dice que x esta “acotada” si sus ocurrencias en el cuerpo de la definición es precedida por λx. Si no es precedida por un λse llama “variable libre”.

(

λ

x. y x)(

λ

y. x y)

libre

Variables

El conjunto de variables libres se define de manera inductiva como:

FV(x)={x}

FV(λx.M)= FV(M) -{x}

FV(M1M2)=F V(M1)

FV(M 2)

El conjunto de variables acotadas se define de manera inductiva como: BV(x)= ϕ BV(λx.M)=BV(M)

{x} BV(M1M2)= B V(M1)

BV(M 2)

Ejemplos

FV(λx. x (λy.x y z)) = {z} FV(λx. ((λy. y+2) x) + y ) = {y} BV(λx. x (λy.x y z)) = {x, y} BV(λx. ((λy. y+2) x) + y ) = {x, y}

Términos cerrados

Un término M se llama cerradosi FV(M)= ϕ. En caso

contrario el término se conoce como abierto.

Note que los conjuntos de variables acotadas y libres no son necesariamente disjuntas; por ejemplo:

(6)

Subtérminos

Subtérmino de un término

Un subtérmino de un término- es alguna parte del término que esta bien formada de acuerdo a la gramática. El conjunto de subtérminos se puede define de manera inductiva como:

Sub:: T →P( T)

Sub(x)={x}

Sub(λx.M)=Sub(M) {(λx.M)} Sub(M1M2)=Sub(M1)Sub(M

2) {M1M2}

Ejercicios

Calcular el conjunto de variables libres, acotadas y subtérminos de las siguientes expresiones λ

λ

x. x(

λ

y.xyz

)

λ

x.

λ

y. xy

λ

z.z

λ

x.

λ

y.

λ

z.xzyz

λ

x.

λ

y.

λ

z.xz(yz)

λ

x.

λ

y.

λ

z.x(zy)z

Figure

Actualización...

Referencias

Actualización...

Related subjects :