• No se han encontrado resultados

lp151be3

N/A
N/A
Protected

Academic year: 2020

Share "lp151be3"

Copied!
6
0
0

Texto completo

(1)

Lenguajes de programaci´

on 2015-1

Bolet´ın de ejercicios 3

Favio E. Miranda Perea Moises V´azquez Reyes

27 de octubre de 2014

1.

Tipos de datos estructurados

1. Defina las siguientes funciones que involucran tipos producto:

a) revpair tal querevpairhe1, e2i →? he2, e1i

b) convtriple tal queconvtriplehe1,he2, e3ii →?hhe1, e2i, e3i

Muestre que sus definiciones son correctas mediante el tipado y la evaluaci´on de algunos casos sencillos.

2. En teor´ıa de conjuntos se cumple la siguiente ley distributiva:

A×(B∪C) = (A×B)∪(A×C)

Muestre que ´esta tambi´en es v´alida para tipos suma y producto definiendo dos funciones:

pts:S×(T+R)→(S×T) + (S×R)

stp: (S×T) + (S×R)→S×(T+R)

¿A qu´e debe corresponder la composici´on de funcionespts◦stpystp◦pts?

3. Se desea extender el lenguaje funcional con un tipo de listas heterog´eneas, denotadolh(S,T) que permita construir listas con elementos de dos tipos distintos, por ejemplo la lista [1 + 3,pred 4,iszero5,7,true] tendr´ıa el tipo lh(Nat,Bool). Se requieren las siguientes operaciones:

hnil, la lista heterog´enea vac´ıa

hconsL(x, `), agrega un elemento xde tipo S al inicio de una lista heterogenea`

hconsR(y, `), agrega un elemento y de tipo Tal inicio de una lista heterogenea`

hcase el operador de an´alisis de casos para listas heterog´eneas.

hcase e of { hnil=>e1 | hconsL(x, `)=>e2 | hconsR(y, `)=>e3}

(2)

slL: lh(S,T) →[S] que devuelve la lista homog´enea de elementos S que figuran en una lista heterog´enea dada.

tolhR: [T]→lh(S,T) que inyecta una lista homog´enea de elementos deTen el tipo de listas heterog´eneas.

conslh: S+T→lh(S,T)→lh(S,T) que agrega un elemento a una lista heterog´enea. b) Defina esta extensi´on mediante azucar sint´actica dentro del lenguaje funcional usando listas homog´eneas y tipos suma. Puede suponer la existencia de todas las operaciones para listas homog´eneas.

4. Realice el inciso b) del ejercicio anterior utilizando tipos variante en vez de tipos suma.

5. Chon Hacker afirma que los tipos suma son innecesarios puesto que se pueden implementar con productos. Su idea es que las etiquetas inl,inr que sirven para distinguir el origen de las expresiones de tipo suma son esencialmente valores booleanos por lo que expresiones como

inl5 o inr”sapo” pueden representarse mediante los pares hfalse,5i yhtrue,”sapo”i. Defina al tipo suma S+T y sus operaciones siguiendo la idea anterior.

Discuta las ventajas y desvantajas de esta definici´on.

6. Considere como primitivo un tipo de listas homog´eneas denotado [T] que cuent con las opera-cionesnil,cons,caselist. Defina las operaciones head,tail de modo que se maneje el caso de la lista vac´ıa mediante el uso del tipo Maybe definido como una suma.

7. Repita el ejercicio anterior definiendo aMaybe como un tipo variante.

2.

Referencias

8. Extienda al lenguaje de referencias con un operador primitivoeqrefsque decida la igualdad de celdas ¿ Es posible definir este operador en vez de agregarlo como primitivo? justifique su respuesta.

9. Extienda al lenguaje de referencias con un operador primitivo de igualdad de contenidos de celdaseqcon¿ Es posible definir este operador en vez de agregarlo como primitivo? justifique su respuesta.

10. Considere el siguiente programa P:

let x = 3

f = λ z. z:= 2*z in

x := 2 + y; f y ;

h x,y i

end

(3)

b) ¿ Cual es el tipo deP ?

c) Evaluar P, siendo µ = (`y 7→ 7) la memoria inicial. Puede omitir algunos pasos pero debe dar todos aquellos que involucran cambios en la memoria.

11. Se quiere extender el lenguaje con referencias mediante una funci´on isrefque decida si una expresion dada es una referencia. Por ejemplo debe suceder que

hisref(6∗7), isref(ref false)i →?hfalse,truei

a) Defina la sem´antica din´amica para isref. b) Defina la sem´antica est´atica para isref.

c) Discuta que tan ´util es la sem´antica est´atica dado que se requiere aceptar programas como el del ejemplo anterior. ¿Qu´e suceder´ıa si expresiones como isref(6∗7) quieren prohibirse mediante el tipado pero tambi´en se desea mantener al operador isref?

12. Muestre que la siguiente expresi´on es tipable:

letf =ref(λx.())inf := (λx.!f()) ; !f()end

¿Cu´al es la forma normal de este programa?

13. Los tipos referencia permiten definir arreglos mediante az´ucar sint´actica. Considere la defini-ci´on array(T) :=def Nat×(Nat → Ref T), la idea es que un arreglo es un par que consta de un n´umero que representa la longitud del arreglo y una funcion de naturales en celdas que restringida a los ´ındices v´alidos del arreglo devuelve el contenido de cada celda. Considere la siguiente extensi´on con tipos de arreglo:

e::=. . . |init(e1, e2)|bound(e)|e1[e2]|e1[e2] :=e3

donde

init(e1, e2) crea un nuevo arreglo de longitud e1 tal que todas sus celdas guardan ae2 bound(e) devuelve la longitud de un arreglo.

e1[e2] denota al valor guardado en la celda con ´ındice e2 en el arreglo e1.

e1[e2] :=e3 actualiza la celda con ´ındicee2 en el arreglo e1 con la expresi´on e3

a) Defina las operaciones anteriores como azucar sint´actica

b) Enuncie y verifique (desendulzando) las reglas para la sem´antica est´atica de arreglos.

14. Considera los siguientes programas:

P1: let z = ref (!x) in P2: let z = !x in

x := !y; x := !y;

y := !z y := z

(4)

Discute las diferencias entre ellos y muestra la evaluaci´on de ambos programas considerando valores de referencia`x, `y, `zpara cada variable. Inicia con la memoriaµ0 = (`x 7→5, `y 7→12). 15. Define una funci´onswap:Ref T→Ref S→Voidtal que swapx y cause el efecto de

intercam-biar los valores guardados en las celdas x, y. Es decir

h(`x7→v1, `y 7→v2),swap`x`yi →?h(`x7→v2, `y 7→v1),()i

16. Define otra versi´on de swap suponiendo que existe una instrucci´on de asignaci´on de pares he1, e2i := he10, e02i cuyo efecto consiste en ejectuar simult´aneamente las asignaciones e1 :=

e01, e2 :=e02 ¿Qu´e ventaja tiene esta nueva versi´on de swapsobre la anterior?

17. Realice una implementaci´on de conjuntos de naturalesNSetutilizando referencias de memoria. El tipo de conjuntos se define como

NSet=def Ref(Nat−>Bool)

Es decir un conjunto es una celda que guarda funciones caracter´ısticas χ :Nat → Bool. Por ejemplo el conjunto{1,7,9}es representado por la funci´onχ1 =χ7 =χ9 =trueyχ n=false

en otro caso. Se deben incluir las siguientes operaciones

in que decide si un natural es elemento de un conjunto

add que agrega un natural a un conjunto.

add2 que agrega dos naturales a un conjunto.

del que elimina un natural de un conjunto

size que devuelve la cardinalidad de un conjunto.

Utilizando la implementaci´on dada defina las siguientes funciones:

empty que construye el conjunto vac´ıo

singleque construye un conjunto con un ´unico elemento dado.

union que devuelve la union de dos conjuntos

inter que devuelve la intersecci´on de dos conjuntos

18. Extienda el lenguaje con referencias para incluir tipos suma y producto. Debe Definir las reglas de ambas sem´anticas.

3.

aquina

K

(5)

4.

Excepciones

21. Evalue formalmente en la m´aquinaK a) try(1 +error)∗3catch0

b) try(7∗error) + (5∗pred(suc(0 + 1)))catch13 c) 2∗(handle7 +raise suc3withx⇒x+x) d) 2∗handle(7 +raise(3), x.x+x)

22. Se desea implementar una funci´onsumlque reciba una lista heterog´enea de enteros o booleanos (olv´ıdese por un momento de la sem´antica est´atica) y devuelva la suma de sus elementos siempre y cuando todos sean enteros y en otro caso devuelva el par h−1, bi donde b es el primer booleano encontrado en la lista. Por ejemplo

suml[1,2 + 3,2,suc(6∗3)] = 27, suml[1 + 3,pred4,iszero5,7,true] =h−1,falsei a) Defina una funci´onslauxy una expresi´onetal que la funci´onsumlquede implementada

como

suml xs = handle slaux xs with x => e

Sugerencia:Es m´as facil si defineslauxa partir de una funci´on binariavsumque verifique si sus argumentos son enteros y si son booleanos lance una excepci´on adecuada de forma que sea manejada por e. Puede suponer que existe una funci´on unariaisintque verifica si su argumento es o no un entero.

b) Sea xs = [3,true,iszero 5,2] y suponga que se quiere respetar el sistema de tipos y mantener listas comoxs. Defina un tipoTy una lista ysde tipoTque sea esencialmente igual a xs.

23. Considere el siguiente lenguaje simple que combina referencias y excepciones sin valores:

n ::= . . . − −N´umeros

` ::= . . . − −Direcciones de memoria

T ::= Nat | Ref T − −Tipos

e ::= n|e1+e2|

`| refe|!e|e1 :=e2

error|catch(e1, e2) − −Programas

El objetivo es desarrollar dos sem´anticas din´amicas para este lenguaje extendiendo la m´aquina K con memorias µ. Para cada una defina con detalle la sintaxis de los marcos y valores del lenguaje as´ı como las reglas de transici´on relevantes, las cuales deben ser de la forma

hµ,P, ei −→ hµ0,P0, e0i

(6)

b) Modifique la sem´antica anterior de manera que la memoria µ al iniciar la evaluaci´on del manejador sea aquella utilizada en el momento en que este fue instalado. Es decir, una excepci´on enrrolla la memoria deshaciendo cualquier efecto anterior. Esta es una sem´antica de transacci´on similar a la implementada en sistemas de bases de datos.

24. Una manera m´as cercana a la realidad de modelar excepciones es mediante el uso de una pila extra de manejadores H la cual evitar´a tener que atravesar la pila de control P para buscar el manejador m´as cercano. Formalice esta idea para el sistema de excepciones con valores mediante una m´aquina alternativa a la m´aquina K. Los estados deben ser de la forma

hH,Pi ≺e hH,Pi e hH,Pi ≺≺raise(v)

25. Considere las siguientes funciones:

exception Excpt of int;

fun twice(f, x) = handle f(f(x)) with Excpt(x) => x; fun pred(x) = if iszero x then raise Excpt(x) else x - 1; fun smart(x) = handle 1 + pred(x) with Excpt(x) => 1;

¿Cu´al es el resultado de evaluar cada una de las siguientes expresiones?

twice(pred, 1)

twice(smart, 0)

Referencias

Documento similar

La réceptivité associée à une transition source est généralement une réceptivité sur front (sinon l’étape suivante est activée en permanence). Les règles de

En funcionamiento CaC – Ciclo a Ciclo, el sistema debe realizar los movimientos contemplados en el DIAGRAMA ESPACIO – FASE una sola vez, ya que en este modo de operación se hace

El sistema no siempre garantiza que una pieza sea depositada debajo de cada una de las estaciones de proceso (taladrado y escariado) después de cada movimiento de

Si la máquina esta en posición inicial (S2 + S5) es decir con el carro transportador arriba y a la izquierda y S1 detecta que ha llegado pieza desde la CINTA1 se pone

Si la máquina esta en posición inicial (S2 y S5) es decir con el carro transportador arriba y a la izquierda y S1 detecta que ha llegado una PIEZA desde la CINTA1 se pone

El accionamiento del programa se deberá hacer por medio de dos pulsadores (NO) y por medio de dos botones en la pantalla , la activación de la salida (motor) deberá

 Configurar las entradas en el Fluid SimP, haciendo doble click sobre el bloque Entradas.. (las entradas START- STOP) se conectan a un bloque “FluidSIM

Jóvenes, este material ha sido elaborado con mucho gusto... Elaborado por