programaciÓn declarativa...reevaluación y el “corte” tema 12.- entrada y salida segunda parte:...

Post on 25-Sep-2020

3 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

PROGRAMACIÓN DECLARATIVA INGENIERÍA INFORMÁTICA

CUARTO CURSO

PRIMER CUATRIMESTRE

Tema 1.- Introducción al Lenguaje Scheme

UNIVERSIDAD DE CÓRDOBA

ESCUELA POLITÉCNICA SUPERIOR DE CÓRDOBA

DEPARTAMENTO DE

INFORMÁTICA Y ANÁLISIS NUMÉRICO

2

Primera

parte:

Scheme

Tema 1.- Introducción al Lenguaje Scheme

Tema 2.- Expresiones y Funciones

Tema 3.- Predicados y sentencias condicionales

Tema 4.- Iteración y Recursión

Tema 5.- Tipos de Datos Compuestos

Tema 6.- Abstracción de Datos

Tema 7.- Lectura y Escritura

Tema 8.- Introducción al Lenguaje Prolog

Tema 9.- Elementos Básicos de Prolog

Tema 10.- Listas

Tema 11.- Reevaluación y el “corte”

Tema 12.- Entrada y Salida

Segunda

parte: Prolog

PROGRAMACIÓN DECLARATIVA PROGRAMA

3

Primera parte: Scheme

Tema 1.- Introducción al Lenguaje Scheme

Tema 2.- Expresiones y Funciones

Tema 3.- Predicados y sentencias condicionales

Tema 4.- Iteración y Recursión

Tema 5.- Tipos de Datos Compuestos

Tema 6.- Abstracción de Datos

Tema 7.- Lectura y Escritura

PROGRAMACIÓN DECLARATIVA PROGRAMA

4

Programación Declarativa Tema 1.- Introducción al Lenguaje Scheme

Índice

1. Características Fundamentales de la Programación

Funcional

2. Reseña Histórica de Scheme

5

Índice

1. Características Fundamentales de la Programación

Funcional

2. Reseña Histórica de Scheme

Programación Declarativa Tema 1.- Introducción al Lenguaje Scheme

6

1. Características Fundamentales de la Programación

Funcional

• La Programación Funcional es un subtipo de la

Programación Declarativa

7

1. Características Fundamentales de la Programación

Funcional

• Programación Declarativa (1 / 7)

o Objetivo: Descripción del Problema

¿“Qué” problema debe ser resuelto?

Observación:

No importa “cómo” es resuelto el problema

Evita aspectos o características de

implementación

8

1. Características Fundamentales de la Programación

Funcional

• Programación Declarativa (2 / 7)

o Características

Expresividad

Extensible: regla del 10% - 90%

Protección

Elegancia Matemática

9

1. Características Fundamentales de la Programación

Funcional

• Programación Declarativa (3 / 7)

o Características

Expresividad

Muestra con claridad el significado de la

programación

Extensible: regla del 10% - 90%

Protección

Elegancia Matemática

10

1. Características Fundamentales de la Programación

Funcional

• Programación Declarativa (4 / 7)

o Características

Expresividad

Extensible: regla del 10% - 90%

Facilidad para ampliar el lenguaje.

El 10 % del lenguaje permite resolver el 90%

de los problemas.

Protección

Elegancia Matemática

11

1. Características Fundamentales de la Programación

Funcional

• Programación Declarativa (5 / 7)

o Características

Expresividad

Extensible: regla del 10% - 90%

Protección

El programador no tiene que preocuparse por

detalles internos de gestión de memoria.

Elegancia Matemática

12

1. Características Fundamentales de la Programación

Funcional

• Programación Declarativa (6 / 7)

Características

Expresividad

Extensible: regla del 10% - 90%

Protección

Elegancia Matemática

Precisión y sencillez

13

1. Características Fundamentales de la Programación

Funcional

• Programación Declarativa (7 / 7)

o Tipos:

Programación Funcional o Aplicativa:

Lisp, Scheme, Haskell, Scala, Erlang,…

Programación Lógica:

Prolog

14

1. Características Fundamentales de la Programación

Funcional

• Principio de la Programación Funcional “Pura”

“El valor de la expresión sólo depende del valor de

sus subexpresiones, si las tiene”

• No existen efectos colaterales

El valor de “a + b” sólo depende de “a” y “b”.

• El término función es usado en su sentido matemático

• No hay instrucciones: programación sin asignaciones

o La Programación Funcional impura permite la

“sentencia de asignación”

15

1. Características Fundamentales de la Programación

Funcional

• Estructura de los programas en la Programación

Funcional

o El programa es una función compuesta de

expresiones o funciones más simples

o Ejecución de una función:

1. Evaluación de los argumentos o parámetros de

la función

2. Evaluación de las expresiones o funciones más

simples

3. Devolución del valor calculado por la función

16

1. Características Fundamentales de la Programación

Funcional

• Tipos de lenguajes funcionales

o La mayoría son lenguajes interpretados

o Algunas versiones son lenguajes compilados

17

1. Características Fundamentales de la Programación

Funcional

• Gestión de la memoria

o Gestión implícita de la memoria:

La gestión de la memoria es una tarea del intérprete.

El programador no debe preocuparse por la gestión de la memoria.

o Recolección de basura: tarea del intérprete.

18

1. Características Fundamentales de la Programación

Funcional

• En resumen:

o El programador sólo se debe de preocupar por la

Descripción del Problema

19

Índice

1. Características Fundamentales de la Programación

Funcional

2. Reseña Histórica de Scheme

Programación Declarativa Tema 1.- Introducción al Lenguaje Scheme

20

2. Reseña Histórica de Scheme

• LISP

• Comparación entre Compilación e Interpretación

• Comparación entre el ámbito léxico (o estático) y el

dinámico

• Origen de Scheme

21

2. Reseña Histórica de Scheme

• LISP

• Comparación entre Compilación e Interpretación

• Comparación entre el ámbito léxico (o estático) y el

dinámico

• Origen de Scheme

22

2. Reseña Histórica de Scheme

• LISP

o John McCarthy (MIT)

o El programa “Advice Taker” :

Fundamentos teóricos: Lógica Matemática

Objetivo: deducción e inferencias

o LISP: LISt Processing (1956 – 1958)

Segundo lenguaje histórico de Inteligencia Artificial (después de IPL)

En la actualidad, segundo lenguaje histórico en uso (después de Fortran)

LISP está basado en el Lambda Calculus (Alonzo Church)

o Scheme es un dialecto de LISP

23

2. Reseña Histórica de Scheme

• LISP

o Características de la Programación Funcional

Recursión

Listas

Gestión implícita de la memoria

Programas interactivos e interpretados

Programación Simbólica

Reglas de ámbito Dinámico para identificadores

no locales

24

2. Reseña Histórica de Scheme

• LISP

o Contribuciones de LISP:

Funciones “Built – in”

Recolección de basura

Lenguaje de Definición Formal:

El propio lenguaje LISP

25

2. Reseña Histórica de Scheme

• LISP

o Aplicaciones: programas de Inteligencia Artificial

Verificación y prueba de Teoremas

Diferenciación e Integración Simbólica

Problemas de Búsqueda

Procesamiento del Lenguaje Natural

Visión Artificial

Robótica

Sistemas de Representación del Conocimiento

Sistemas Expertos

Etc.

26

2. Reseña Histórica de Scheme

• LISP

o Dialectos (1 /2)

Mac LISP (Man and computer or Machine – aided

cognition): versión de la Costa Este

Inter LISP (Interactive LISP): Versión de la Costa

Oeste

Compañía de Bolt, Beranek y Newman (BBN)

Centro de Investigación de Xerox en Palo Alto

(Texas)

Máquina LISP

27

2. Reseña Histórica de Scheme

• LISP

o Dialectos (2 / 2)

Mac LISP (Man and computer or Machine – aided cognition): versión de la Costa Este

C-LISP: Universidad de Massachusetts

Franz LISP: Universidad de California (Berkeley). Versión compilada.

NIL (New implementation of LISP): MIT.

PSL (Portable Standard LISP): Universidad de Utah

Scheme: MIT.

T (True): Universidad de Yale

Common LISP

28

2. Reseña Histórica de Scheme

• LISP

• Comparación entre Compilación e Interpretación

• Comparación entre el ámbito léxico (o estático) y el

dinámico

• Origen de Scheme

29

2. Reseña Histórica de Scheme

• Comparación entre Compilación e Interpretación

o Compilación:

El código fuente (alto nivel) es transformado

en código ejecutable (bajo nivel), que puede

ser ejecutado independientemente.

30

2. Reseña Histórica de Scheme

• Comparación entre Compilación e Interpretación

o Compilación

Código fuente Compilador

31

Errores de compilación

2. Reseña Histórica de Scheme

• Comparación entre Compilación e Interpretación

o Compilación

Código fuente Compilador

32

Código ejecutable

2. Reseña Histórica de Scheme

• Comparación entre Compilación e Interpretación

o Compilación

Código fuente Compilador

33

Datos de entrada

2. Reseña Histórica de Scheme

• Comparación entre Compilación e Interpretación

o Compilación

Código ejecutable Código fuente Compilador

34

Errores de

Ejecución

2. Reseña Histórica de Scheme

• Comparación entre Compilación e Interpretación

o Compilación

Datos de entrada

Código ejecutable Código fuente Compilador

Resultados

35

2. Reseña Histórica de Scheme

• Comparación entre Compilación e Interpretación

o Compilación

Código ejecutable Código fuente Compilador

Resultados

Datos de entrada

36

2. Reseña Histórica de Scheme

• Comparación entre Compilación e Interpretación

o Interpretación

37

2. Reseña Histórica de Scheme

• Comparación entre Compilación e Interpretación

o Interpretación o simulación: consiste en un ciclo

de tres fases

38

2. Reseña Histórica de Scheme

• Comparación entre Compilación e Interpretación

o Interpretación o simulación: consiste en un ciclo de

tres fases

1. Análisis

El código fuente es analizado para

determinar la siguiente sentencia

correcta que va a ser ejecutada.

39

2. Reseña Histórica de Scheme

• Comparación entre Compilación e Interpretación

o Interpretación o simulación: consiste en un ciclo de

tres fases

1. Análisis

El código fuente es analizado para

determinar la siguiente sentencia

correcta que va a ser ejecutada.

2. Generación

La sentencia es transformada en código

ejecutable.

40

2. Reseña Histórica de Scheme

• Comparación entre Compilación e Interpretación

o Interpretación o simulación: consiste en un ciclo de

tres fases

1. Análisis

El código fuente es analizado para

determinar la siguiente sentencia

correcta que va a ser ejecutada.

2. Generación

La sentencia es transformada en Código

ejecutable.

3. Ejecución

El código generado es ejecutado.

41

2. Reseña Histórica de Scheme

• Comparación entre Compilación e Interpretación

o Interpretación

Código fuente Intérprete

42

Errores de

interpretación

2. Reseña Histórica de Scheme

• Comparación entre Compilación e Interpretación

o Interpretación

Datos de entrada

Código fuente Intérprete

43

Resultados

Errores de

ejecución

2. Reseña Histórica de Scheme

• Comparación entre Compilación e Interpretación

o Interpretación

Datos de entrada

Código fuente Intérprete

44

2. Reseña Histórica de Scheme

• Comparación entre Compilación e Interpretación

o Interpretación

Resultados

Datos de entrada

Código fuente Intérprete

45

o Compilación

Independencia

Necesidades de

memoria

Eficiencia

Global

No interactividad

Código cerrado

durante la ejecución

o Interpretación

Dependencia

Sin necesidades de

memoria

Menos eficiencia

Local

Interactividad

Código abierto

durante la ejecución

2. Reseña Histórica de Scheme

• Comparación entre Compilación e Interpretación

46

2. Reseña Histórica de Scheme

• LISP

• Comparación entre Compilación e Interpretación

• Comparación entre el ámbito léxico (o estático) y el

dinámico

• Origen de Scheme

47

2. Reseña Histórica de Scheme

• Comparación entre el ámbito léxico (o estático) y el

dinámico

o Las reglas de ámbito determinan la declaración de

identificadores no locales

o Identificadores no locales:

Variables, Funciones o Procedimientos que son

usados en otra función o procedimiento donde no

han sido declarados.

48

2. Reseña Histórica de Scheme

• Comparación entre el ámbito léxico (o estático) y el

dinámico

o Tipos

Ámbito Léxico o Estático

Con “estructura de bloques”: Pascal, Scheme

Sin “estructura de bloques”: C, Fortran

Ámbito Dinámico

Siempre con “estructura de bloques”:

Lisp, SNOBOL, APL

49

2. Reseña Histórica de Scheme

• Comparación entre el ámbito léxico (o estático) y el dinámico

o Estructura de bloques

Un procedimiento o función puede llamar a

- Sí mismo

- Sus hijos (pero no a sus nietos…)

- Sus hermanos (pero no a sus sobrinos)

- Su padre, abuelo, bisabuelo, …

- Los hermanos de su padres, abuelo, …

Un procedimiento o función puede ser llamado por

- Sí mismo

- Su padre (pero no por su abuelo, …)

- Sus hijos, nietos, bisnietos, …

- Sus hermanos y sus hijos, nietos, ...

50

P Declaración de procedimiento f Declaración de procedimiento g Declaración de procedimiento h Declaración de procedimiento k Declaración de procedimiento l Declaración de procedimiento m Declaración de procedimiento n

Ejemplo

de estructura

de bloques

51

P

f l

m n

g h

k

Jerarquía de la estructura de bloques

52

f l

m n

g h

k

Funciones que pueden ser llamadas por f

P

53

f l

m n

g h

k

Funciones que pueden llamar a f

P

54

f l

m n

g h

k

P

Funciones que pueden ser llamadas por h

55

f l

m n

g h

k

P

Funciones que pueden llamar a h

56

2. Reseña Histórica de Scheme

• Comparación entre el ámbito léxico (o estático) y el dinámico

o Ámbito léxico o estático

La declaración de un identificador no local

depende del contexto léxico más cercano

Reglas del anidamiento más cercano

57

2. Reseña Histórica de Scheme

• Comparación entre el ámbito léxico (o estático) y el dinámico

o Ámbito léxico o estático

La declaración de un identificador no local

depende del contexto léxico más cercano

Sólo hay que leer el programa para determinar la

declaración de un identificador

58

2. Reseña Histórica de Scheme

• Comparación entre el ámbito léxico (o estático) y el dinámico

o Ámbito léxico o estático

Reglas del anidamiento más cercano

El ámbito de un procedimiento (*) f incluye al

procedimiento f.

Si un identificador no local x es usado en f

entonces la declaración de x debe ser

encontrada en procedimiento más cercano g

que incluya a f

Observación (*) : procedimiento, función o

bloque.

59

Declaración de procedimiento h Declaración de una variable x (x1) Declaración de una variable y (y1) Declaración de una variable z (z1) Declaración de procedimiento g Declaración de una variable x (x2) Declaración de una variable y (y2) Declaración de procedimiento f Declaración de una variable x (x3) Uso de x ( x3) Uso de y ( y2) Uso de z ( z1) Uso de x ( x2) Uso de y ( y2) Uso de z ( z1) Llamada a f Uso de x ( x1) Uso de y ( y1) Uso de z ( z1) Llamada a g

Ejemplo:

Ámbito léxico

con

“estructura de bloques”

60

2. Reseña Histórica de Scheme

• Comparación entre el ámbito léxico (o estático) y el dinámico

o Ámbito léxico o estático

Sin estructura de bloques

Si x no es local para una función específica entonces no es local para todas las funciones

61

int x; /* x1 */

int y; /* y1 */

int z; /* z1 */

main()

{

int x; /* x2 */

int y; /* y2 */

/* Uso de x x2 */

/* Uso de y y2 */

/* Uso de z z1 */

/* Llamada a f */

f ();

}

f()

{

int x; /* x3 */

/* Uso de x x3 */

/* Uso de y y1 */

/* Uso de z z1 */

}

Ejemplo en C:

Ámbito léxico

sin

“estructura de bloques”

Las variables

globales no son

recomendables

62

2. Reseña Histórica de Scheme

• Comparación entre el ámbito léxico (o estático) y el dinámico

o Ámbito dinámico

La declaración de un identificador depende de la ejecución del programa.

Regla de activación más cercana.

63

2. Reseña Histórica de Scheme

• Comparación entre el ámbito léxico (o estático) y el dinámico

o Ámbito dinámico

La declaración de un identificador depende de la ejecución del programa.

Hay que ejecutar el programa para determinar la declaración de un identificador

64

2. Reseña Histórica de Scheme

• Comparación entre el ámbito léxico (o estático) y el dinámico

o Ámbito dinámico

Reglas de la activación más cercana

El ámbito de un procedimiento (*) f incluye al procedimiento f.

Si un identificador no local x es usado en la activación de f entonces la declaración de x debe ser encontrada en el procedimiento activo más cercano g con una declaración de x

Observación (*): procedimiento, función o bloque

65

2. Reseña Histórica de Scheme

• Comparación entre el ámbito léxico (o estático) y el

dinámico

o Observación:

El Ámbito dinámico permite que un

identificador pueda estar asociado a

declaraciones diferentes durante la ejecución

del programa.

66

Programa

Declaración de una variable x

Declaración de procedimiento f

Uso de x

Declaración de procedimiento g

Declaración de una variable x

Declaración de procedimiento h

Uso de x

Llamada a f

Llamada a f

Llamada a h

Si condición = verdadero

entonces Llamada a g

si no Uso de x

fin si

Uso de x

Llamada a f

Llamada a g

Ejemplo:

Comparación

entre

los ámbitos

léxico

y

dinámico

67

Programa

f g

f

f

h

Pila de Activación Árbol de Activación

68

Programa

f g

f

f

h

Programa

Pila de Activación Árbol de Activación

69

f g

f

f

h

f

Programa

Programa

Pila de Activación Árbol de Activación

70

f g

f

f

h

Programa

Programa

Pila de Activación Árbol de Activación

71

f g

f

f

h

g

Programa

Programa

Pila de Activación Árbol de Activación

72

f g

f

f

h

g

f

Programa

Programa

Pila de Activación Árbol de Activación

73

f g

f

f

h

g

Programa

Programa

Pila de Activación Árbol de Activación

74

f g

f

f

h

g

h

Programa

Programa

Pila de Activación Árbol de Activación

75

f g

f

f

h

g

h

f

Programa

Programa

Pila de Activación Pila de Activación Árbol de Activación

76

f g

f

f

h

g

h

Programa

Programa

Pila de Activación Árbol de Activación

77

f g

f

f

h

g

Programa

Programa

Pila de Activación Árbol de Activación

78

f g

f

f

h

Programa

Programa

Pila de Activación Árbol de Activación

79

f g

f

f

h

Programa

Pila de Activación Árbol de Activación

80

f

g g

f

h

Cambios en la Pila de Activación (1 / 2)

Programa

f

Programa

Programa Programa Programa

g

Programa

g

Programa

h

g

Programa

81

f

g

Programa

h

g

Programa

h

g

Programa

Programa

Cambios en la Pila de Activación (2 / 2)

82

Ejecución con

ámbito léxico

Programa

Declaración de una variable x (x1)

Declaración de procedimiento f

Uso de x

Declaración de procedimiento g

Declaración de una variable x (x2)

Declaración de procedimiento h

Uso de x

Llamada a f

Llamada a f

Llamada a h

Si condición = verdadero

entonces Llamada a g

si no Uso de x

fin si

Uso de x

Llamada a f

Llamada a g

83

Programa

f g

f

f

h

Ámbito léxico

Pila de Activación Árbol de Activación

84

Programa

Declaración de una variable x (x1)

Declaración de procedimiento f

Uso de x

Declaración de procedimiento g

Declaración de una variable x (x2)

Declaración de procedimiento h

Uso de x

Llamada a f

Llamada a f

Llamada a h

Si condición = verdadero

entonces Llamada a g

si no Uso de x

fin si

Uso de x

Llamada a f

Llamada a g

Ejecución con

ámbito léxico

85

f g

f

f

h

Ámbito léxico

Uso de x1 en Programa

Programa

Programa

Pila de Activación Árbol de Activación

86

Programa

Declaración de una variable x (x1)

Declaración de procedimiento f

Uso de x

Declaración de procedimiento g

Declaración de una variable x (x2)

Declaración de procedimiento h

Uso de x

Llamada a f

Llamada a f

Llamada a h

Si condición = verdadero

entonces Llamada a g

si no Uso de x

fin si

Uso de x

Llamada a f

Llamada a g

Ejecución con

ámbito léxico

Programa

Declaración de una variable x (x1)

Declaración de procedimiento f

Uso de x

Declaración de procedimiento g

Declaración de una variable x (x2)

Declaración de procedimiento h

Uso de x

Llamada a f

Llamada a f

Llamada a h

Si condición = verdadero

entonces Llamada a g

si no Uso de x

fin si

Uso de x

Llamada a f

Llamada a g 87

Ejecución con

ámbito léxico

88

f g

f

f

h

f

Ámbito léxico

Uso de x1 en f

Programa

Programa

Pila de Activación Árbol de Activación

89

f g

f

f

h

Programa

Programa Ámbito léxico

Pila de Activación Árbol de Activación

Programa

Declaración de una variable x (x1)

Declaración de procedimiento f

Uso de x

Declaración de procedimiento g

Declaración de una variable x (x2)

Declaración de procedimiento h

Uso de x

Llamada a f

Llamada a f

Llamada a h

Si condición = verdadero

entonces Llamada a g

si no Uso de x

fin si

Uso de x

Llamada a f

Llamada a g 90

Ejecución con

ámbito léxico

91

f g

f

f

h

g

Programa

Programa Ámbito léxico

Pila de Activación Árbol de Activación

Programa

Declaración de una variable x (x1)

Declaración de procedimiento f

Uso de x

Declaración de procedimiento g

Declaración de una variable x (x2)

Declaración de procedimiento h

Uso de x

Llamada a f

Llamada a f

Llamada a h

Si condición = verdadero

entonces Llamada a g

si no Uso de x

fin si

Uso de x

Llamada a f

Llamada a g 92

Ejecución con

ámbito léxico

Programa

Declaración de una variable x (x1)

Declaración de procedimiento f

Uso de x

Declaración de procedimiento g

Declaración de una variable x (x2)

Declaración de procedimiento h

Uso de x

Llamada a f

Llamada a f

Llamada a h

Si condición = verdadero

entonces Llamada a g

si no Uso de x

fin si

Uso de x

Llamada a f

Llamada a g 93

Ejecución con

ámbito léxico

94

f g

f

f

h

g

f

Programa

Programa

Pila de Activación Árbol de Activación

Ámbito léxico

Uso de x1 en f

95

f g

f

f

h

g

Programa

Programa Ámbito léxico

Pila de Activación Árbol de Activación

Programa

Declaración de una variable x (x1)

Declaración de procedimiento f

Uso de x

Declaración de procedimiento g

Declaración de una variable x (x2)

Declaración de procedimiento h

Uso de x

Llamada a f

Llamada a f

Llamada a h

Si condición = verdadero

entonces Llamada a g

si no Uso de x

fin si

Uso de x

Llamada a f

Llamada a g 96

Ejecución con

ámbito léxico

Programa

Declaración de una variable x (x1)

Declaración de procedimiento f

Uso de x

Declaración de procedimiento g

Declaración de una variable x (x2)

Declaración de procedimiento h

Uso de x

Llamada a f

Llamada a f

Llamada a h

Si condición = verdadero

entonces Llamada a g

si no Uso de x

fin si

Uso de x

Llamada a f

Llamada a g 97

Ejecución con

ámbito léxico

98

f g

f

f

h

g

h

Ámbito léxico

Uso de x2 en h

Programa

Programa

Pila de Activación Árbol de Activación

Programa

Declaración de una variable x (x1)

Declaración de procedimiento f

Uso de x

Declaración de procedimiento g

Declaración de una variable x (x2)

Declaración de procedimiento h

Uso de x

Llamada a f

Llamada a f

Llamada a h

Si condición = verdadero

entonces Llamada a g

si no Uso de x

fin si

Uso de x

Llamada a f

Llamada a g 99

Ejecución con

ámbito léxico

Programa

Declaración de una variable x (x1)

Declaración de procedimiento f

Uso de x

Declaración de procedimiento g

Declaración de una variable x (x2)

Declaración de procedimiento h

Uso de x

Llamada a f

Llamada a f

Llamada a h

Si condición = verdadero

entonces Llamada a g

si no Uso de x

fin si

Uso de x

Llamada a f

Llamada a g 100

Ejecución con

ámbito léxico

101

f g

f

f

h

g

h

f

Programa

Programa Ámbito léxico

Pila de Activación Árbol de Activación

102

f g

f

f

h

g

h

Programa

Programa Ámbito léxico

Pila de Activación Árbol de Activación

Programa

Declaración de una variable x (x1)

Declaración de procedimiento f

Uso de x

Declaración de procedimiento g

Declaración de una variable x (x2)

Declaración de procedimiento h

Uso de x

Llamada a f

Llamada a f

Llamada a h

Si condición = verdadero

entonces Llamada a g

si no Uso de x

fin si

Uso de x

Llamada a f

Llamada a g 103

Ejecución con

ámbito léxico

104

f g

f

f

h

g

Programa

Programa Ámbito léxico

Uso de x2 en g

Pila de Activación Árbol de Activación

Programa

Declaración de una variable x (x1)

Declaración de procedimiento f

Uso de x

Declaración de procedimiento g

Declaración de una variable x (x2)

Declaración de procedimiento h

Uso de x

Llamada a f

Llamada a f

Llamada a h

Si condición = verdadero

entonces Llamada a g

si no Uso de x

fin si

Uso de x

Llamada a f

Llamada a g 105

Ejecución con

ámbito léxico

106

f g

f

f

h

Programa

Programa Ámbito léxico

Pila de Activación Árbol de Activación

107

Programa

f g

f

f

h

Ámbito léxico

Pila de Activación Árbol de Activación

108

Ejecución con

ámbito

dinámico

Programa

Declaración de una variable x (x1)

Declaración de procedimiento f

Uso de x

Declaración de procedimiento g

Declaración de una variable x (x2)

Declaración de procedimiento h

Uso de x

Llamada a f

Llamada a f

Llamada a h

Si condición = verdadero

entonces Llamada a g

si no Uso de x

fin si

Uso de x

Llamada a f

Llamada a g

109

Programa

f g

f

f

h

Ámbito dinámico

Pila de Activación Árbol de Activación

110

Ejecución con

ámbito

dinámico

Programa

Declaración de una variable x (x1)

Declaración de procedimiento f

Uso de x

Declaración de procedimiento g

Declaración de una variable x (x2)

Declaración de procedimiento h

Uso de x

Llamada a f

Llamada a f

Llamada a h

Si condición = verdadero

entonces Llamada a g

si no Uso de x

fin si

Uso de x

Llamada a f

Llamada a g

111

f g

f

f

h

Programa

Programa Ámbito dinámico

Uso de x1 en programa

Pila de Activación Árbol de Activación

Programa

Declaración de una variable x (x1)

Declaración de procedimiento f

Uso de x

Declaración de procedimiento g

Declaración de una variable x (x2)

Declaración de procedimiento h

Uso de x

Llamada a f

Llamada a f

Llamada a h

Si condición = verdadero

entonces Llamada a g

si no Uso de x

fin si

Uso de x

Llamada a f

Llamada a g 112

Ejecución con

ámbito

dinámico

Programa

Declaración de una variable x (x1)

Declaración de procedimiento f

Uso de x

Declaración de procedimiento g

Declaración de una variable x (x2)

Declaración de procedimiento h

Uso de x

Llamada a f

Llamada a f

Llamada a h

Si condición = verdadero

entonces Llamada a g

si no Uso de x

fin si

Uso de x

Llamada a f

Llamada a g 113

Ejecución con

ámbito

dinámico

114

f g

f

f

h

f

Programa

Programa Ámbito dinámico

Uso de x1 de programa en f

Pila de Activación Árbol de Activación

115

f g

f

f

h

Programa

Programa

Pila de Activación Árbol de Activación

Ámbito dinámico

116

Ejecución con

ámbito

dinámico

Programa

Declaración de una variable x (x1)

Declaración de procedimiento f

Uso de x

Declaración de procedimiento g

Declaración de una variable x (x2)

Declaración de procedimiento h

Uso de x

Llamada a f

Llamada a f

Llamada a h

Si condición = verdadero

entonces Llamada a g

si no Uso de x

fin si

Uso de x

Llamada a f

Llamada a g

117

f g

f

f

h

g

Programa

Programa

Pila de Activación Árbol de Activación

Ámbito dinámico

118

Ejecución con

ámbito

dinámico

Programa

Declaración de una variable x (x1)

Declaración de procedimiento f

Uso de x

Declaración de procedimiento g

Declaración de una variable x (x2)

Declaración de procedimiento h

Uso de x

Llamada a f

Llamada a f

Llamada a h

Si condición = verdadero

entonces Llamada a g

si no Uso de x

fin si

Uso de x

Llamada a f

Llamada a g

119

Ejecución con

ámbito

dinámico

Programa

Declaración de una variable x (x1)

Declaración de procedimiento f

Uso de x

Declaración de procedimiento g

Declaración de una variable x (x2)

Declaración de procedimiento h

Uso de x

Llamada a f

Llamada a f

Llamada a h

Si condición = verdadero

entonces Llamada a g

si no Uso de x

fin si

Uso de x

Llamada a f

Llamada a g

120

f g

f

f

h

g

f

Programa

Programa Ámbito dinámico

Observación: uso de x2 de g en f

Pila de Activación Árbol de Activación

121

f g

f

f

h

g

Programa

Programa

Pila de Activación Árbol de Activación

Ámbito dinámico

122

Ejecución con

ámbito

dinámico

Programa

Declaración de una variable x (x1)

Declaración de procedimiento f

Uso de x

Declaración de procedimiento g

Declaración de una variable x (x2)

Declaración de procedimiento h

Uso de x

Llamada a f

Llamada a f

Llamada a h

Si condición = verdadero

entonces Llamada a g

si no Uso de x

fin si

Uso de x

Llamada a f

Llamada a g

123

Ejecución con

ámbito

dinámico

Programa

Declaración de una variable x (x1)

Declaración de procedimiento f

Uso de x

Declaración de procedimiento g

Declaración de una variable x (x2)

Declaración de procedimiento h

Uso de x

Llamada a f

Llamada a f

Llamada a h

Si condición = verdadero

entonces Llamada a g

si no Uso de x

fin si

Uso de x

Llamada a f

Llamada a g

124

f g

f

f

h

g

h

Programa

Programa Ámbito dinámico

Uso de x2 de g en h

Pila de Activación Árbol de Activación

Programa

Declaración de una variable x (x1)

Declaración de procedimiento f

Uso de x

Declaración de procedimiento g

Declaración de una variable x (x2)

Declaración de procedimiento h

Uso de x

Llamada a f

Llamada a f

Llamada a h

Si condición = verdadero

entonces Llamada a g

si no Uso de x

fin si

Uso de x

Llamada a f

Llamada a g 125

Ejecución con

ámbito

dinámico

126

Ejecución con

ámbito

dinámico

Programa

Declaración de una variable x (x1)

Declaración de procedimiento f

Uso de x

Declaración de procedimiento g

Declaración de una variable x (x2)

Declaración de procedimiento h

Uso de x

Llamada a f

Llamada a f

Llamada a h

Si condición = verdadero

entonces Llamada a g

si no Uso de x

fin si

Uso de x

Llamada a f

Llamada a g

127

f g

f

f

h

g

h

f

Programa

Programa Ámbito dinámico

Observación: uso de x2 de g en f

Pila de Activación

Árbol de Activación

128

f g

f

f

h

g

h

Programa

Programa

Pila de Activación

Ámbito dinámico

Árbol de Activación

129

Ejecución con

ámbito

dinámico

Programa

Declaración de una variable x (x1)

Declaración de procedimiento f

Uso de x

Declaración de procedimiento g

Declaración de una variable x (x2)

Declaración de procedimiento h

Uso de x

Llamada a f

Llamada a f

Llamada a h

Si condición = verdadero

entonces Llamada a g

si no Uso de x

fin si

Uso de x

Llamada a f

Llamada a g

130

f g

f

f

h

g

Ámbito dinámico

Uso de x2 de g en g

Programa

Programa

Pila de Activación

Árbol de Activación

Programa

Declaración de una variable x (x1)

Declaración de procedimiento f

Uso de x

Declaración de procedimiento g

Declaración de una variable x (x2)

Declaración de procedimiento h

Uso de x

Llamada a f

Llamada a f

Llamada a h

Si condición = verdadero

entonces Llamada a g

si no Uso de x

fin si

Uso de x

Llamada a f

Llamada a g 131

Ejecución con

ámbito

dinámico

132

f g

f

f

h

Programa

Programa

Pila de Activación

Ámbito dinámico

Árbol de Activación

133

Programa

f g

f

f

h

Programa

Pila de Activación

Ámbito dinámico

Árbol de Activación

134

2. Reseña Histórica de Scheme

• LISP

• Comparación entre Compilación e Interpretación

• Comparación entre el ámbito léxico (o estático) y el

dinámico

• Origen de Scheme

135

2. Reseña Histórica de Scheme

• Origen de Scheme

o Gerald Jay Sussman (MIT) and Guy Lewis Steele Jr.

o Pregunta:

¿Cómo sería LISP con reglas de Ámbito Léxico o Estático?

o Respuesta: un nuevo lenguaje Scheme

Implementación más eficiente de la recursión

Funciones de primera clase

Reglas semánticas rigurosas

o Influencia en Common LISP: reglas de ámbito léxico

o Revised 5 Report on the Algorithmic Language Scheme

136

2. Reseña Histórica de Scheme

• Origen de Scheme

o Estructura de los programas de Scheme

Secuencia de

definiciones de funciones y variables

y expresiones

PROGRAMACIÓN DECLARATIVA INGENIERÍA INFORMÁTICA

CUARTO CURSO

PRIMER CUATRIMESTRE

Tema 1.- Introducción al Lenguaje Scheme

UNIVERSIDAD DE CÓRDOBA

ESCUELA POLITÉCNICA SUPERIOR DE CÓRDOBA

DEPARTAMENTO DE

INFORMÁTICA Y ANÁLISIS NUMÉRICO

top related