Download Puntos importantes Previo: define-struct Programación imperativa
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)