Download Puntos importantes Previo: define-struct Programación imperativa

Document related concepts
Transcript
Lenguajes y
Paradigmas de
Programación
Clase 18
Tema 9: Asignación, estado local y
modelo de entornos
Puntos importantes
•
•
•
•
Programación imperativa
Sentencias de asignación en Scheme
Estado local
Modelo de entornos
Programación
imperativa
Previo: define-struct
• (define-struct <tipo>
(<campo-1> ... <campo-n>))
• Automáticamente se define el constructor
y los selectores:
(make-<tipo> <arg-1> ... <arg-n>)
(<tipo>-<campo> <objeto>)
• Estado (memoria del ordenador)
• Asignación
• Pasos de ejecución
• Referencias
Formas especiales set
• (set! <variable> <valor>)
• (set-car! <pareja> <valor>)
• (set-cdr! <pareja> <valor>)
• (set-<tipo>-<campo>! <objeto> <valor>)
Referencias
>
>
>
>
>
>
>
(define a (cons 4 5))
(define b a)
a
b
(set-car! a 8)
a
b
Modelo de
computación
¿Cómo se interpreta?
• Cambio en el modelo de computación
• El modelo funcional no puede “explicar” la
(define x 5)
(set! x (+ 1 x))
x
asignación ni el cambio de estado
• Nuevo modelo: modeo de entornos
• ¡Vamos a deducirlo!
¿Cómo se interpreta?
(define x 5)
(define (prueba)
(set! x (+ 1 x))
x)
(prueba)
x
¿Cómo se interpreta?
(define x 5)
(define (prueba)
(define y 10)
(set! y (+ x y))
y)
(prueba)
x
¿Cómo se interpreta?
(define x 5)
(define (prueba)
(define x 10)
(set! x (+ 1 x))
x)
(prueba)
x
¿Cómo se interpreta?
(define x 5)
(define prueba
(lambda (x)
(define x 10)
(set! x (+ 1 x))
x)
(prueba)
x
¿Cómo se interpreta?
(define (prueba)
(define y 10)
(lambda (x)
(set! y (+ x y))
y))
(define f (prueba))
(f 5)
(f 5)
¿Cómo se interpreta?
(define (make-counter)
(define x 0)
(lambda ()
(set! x (+ x 1))
x))
(define count (make-counter))
(count)
(count)