Tema 4 Entornos y procedimientos locales

Anuncio
Tema 4
Entornos y procedimientos locales
José A. Alonso
M. José Hidalgo
Álvaro Romero
Dpto. Ciencias de la Computación e Inteligencia Artificial
U NIVERSIDAD
Informática
DE
S EVILLA
Entornos y procedimientos locales
4.1
Entornos locales
Contenido:
•
•
•
•
Forma especial let.
Forma especial let∗.
Forma especial letrec.
Procedimientos y entornos locales.
Informática
Entornos y procedimientos locales
4.2
Entornos
Concepto de entorno:
• Variable libre.
• Variable ligada.
• Ámbito de una variable.
Entornos globales:
• Entorno global inicial (del sistema).
• Entorno global del usuario.
Entornos locales:
• Variable ligada localmente.
Informática
Entornos y procedimientos locales
4.3
Forma especial let
(let ((variable1 valor1)
(variable2 valor2 )
..
.
(variableN valorN ))
expresión1
expresión2
..
.
expresiónM )
Informática
Entornos y procedimientos locales
4.4
Forma especial let: ejemplos
(+ 5 x )
(let ((x 8)) (+ 5 x ))
(+ x 5)
(∗ a 8)
(let ((x 8)) (∗ a x ))
(define a 4)
(∗ a 8)
(let ((x 8)) (∗ a x ))
(∗ a x )
Informática
=>
=>
=>
=>
=>
reference
13
reference
reference
reference
=>
=>
=>
12
12
reference to undefined identifier: x
to undefined identifier: x
to undefined identifier: x
to undefined identifier: a
to undefined identifier: a
Entornos y procedimientos locales
4.5
Forma especial let: ejemplos
(define a 10)
(define x 0)
(let ((x 3)
(y 2))
(∗ (+ x y ) b))
(let ((x 3)
(y 2))
(∗ (+ x y ) a))
=> reference to undefined identifier: b
=> 50
(let ((x 3))
(let ((y 2)
(a (sqrt 4)))
(∗ (+ x y ) b)))
(let ((x 3))
(let ((y 2)
(a (sqrt 4)))
(∗ (+ x y ) a)))
=> reference to undefined identifier: b
=> 10
Informática
Entornos y procedimientos locales
4.6
Forma especial let: raices
(raices 1 −5 6)
(raices 1 2 3)
=>
=>
( 3 2)
raices: discriminante negativo
(define raices
(lambda (a b c )
(let ((discriminante (− (expt b 2) (∗ 4 a c ))))
(if (negative? discriminante)
(error "raices: discriminante negativo")
(list (/ (+ (− b) (sqrt discriminante)) (∗ 2 a))
(/ (− (− b) (sqrt discriminante)) (∗ 2 a)))))))
Informática
Entornos y procedimientos locales
4.7
Forma especial let: area-hexagono
(area-hexagono 1)
(area-hexagono (sqrt (sqrt 3)))
=>
=>
2.598076211353316
4.499999999999999
(define area-hexagono
(lambda (lado)
(let ((area-triangulo (lambda (base altura)
(/ (∗ base altura) 2)))
(apotema (lambda (lado)
(∗ (sqrt 3) (/ lado 2)))))
(∗ 6 (area-triangulo lado (apotema lado))))))
Informática
Entornos y procedimientos locales
4.8
Forma especial let: asignación paralela
(let ((a 0)
(b (+ a 1))
(c (+ b 1)))
(list a b c ))
=> reference to undefined identifier: a
(let ((a 0))
(let ((b (+ a 1)))
(let ((c (+ b 1)))
(list a b c ))))
=> (0 1 2)
Informática
Entornos y procedimientos locales
4.9
Forma especial let∗
(let∗ ((variable1 valor1)
(variable2 valor2 )
..
.
(variableN valorN ))
expresión1
expresión2
..
.
expresiónM )
Informática
Entornos y procedimientos locales
4.10
Forma especial let∗: asignación secuencial
(let∗ ((a 0)
(b (+ a 1))
(c (+ b 1)))
(list a b c ))
=> (0 1 2)
(let ((x 5))
(let∗ ((x 3)
(y (∗ 2 x )))
(+ x y )))
=> 9
Informática
Entornos y procedimientos locales
4.11
Formas especiales let y let∗ y procedimientos recursivos
(let ((fact (lambda (n)
(if (zero? n)
1
(∗ n (fact (− n 1)))))))
(fact 4))
=> reference to undefined identifier: fact
(let∗ ((fact (lambda (n)
(if (zero? n)
1
(∗ n (fact (− n 1)))))))
(fact 4))
=> reference to undefined identifier: fact
Informática
Entornos y procedimientos locales
4.12
Forma especial letrec
(letrec ((variable1 valor1)
(variable2 valor2 )
..
.
(variableN valorN ))
expresión1
expresión2
..
.
expresiónM )
Informática
Entornos y procedimientos locales
4.13
Forma especial letrec: ejemplos
(letrec ((fact (lambda (n)
(if (zero? n) 1
(∗ n (fact (− n 1)))))))
(fact 4))
=> 24
(letrec ((elemento 2)
(altura 3)
(proc (lambda (m n)
(if (zero? n) 1
(expt m (proc m (− n 1)))))))
(proc elemento altura))
=> 16
Informática
Entornos y procedimientos locales
4.14
Forma especial letrec: suma-elementos-it
(suma-elementos-it ’(1 2 3 4))
(suma-elementos-it ’(5 1 3))
(suma-elementos-it ())
=>
=>
=>
10
9
(define suma-elementos-it
(lambda (lista)
(letrec ((aux (lambda (l ac )
(if (null? l )
ac
(aux (cdr l )
(+ ac (car l )))))))
(aux lista 0))))
Informática
Entornos y procedimientos locales
4.15
Forma especial letrec: cambia-it
(cambia-it ’a ’b ’(c d a b))
(cambia-it ’a ’b ’(c d b a b (a c) f))
=>
=>
( c d b b)
(c d b b b (a c) f)
(define cambia-it
(lambda (x y lista)
(letrec ((cambia-it-aux
(lambda (l ac )
(cond ((null? l ) ac )
((equal? x (car l ))
(cambia-it-aux (cdr l ) (append ac (list y ))))
(else
(cambia-it-aux (cdr l ) (append ac (list (car l )))))))))
(cambia-it-aux lista ()))))
Informática
Entornos y procedimientos locales
4.16
Procedimientos y entornos locales
(+ 5 x )
((lambda (x ) (+ 5 x )) 8)
(+ x 5)
(∗ a 8)
((lambda (x ) (∗ a x )) 8)
(define a 4)
(∗ a 8)
((lambda(x ) (∗ a x )) 8)
(∗ a x )
Informática
=>
=>
=>
=>
=>
reference
13
reference
reference
reference
=>
=>
=>
12
12
reference to undefined identifier: x
to undefined identifier: x
to undefined identifier: x
to undefined identifier: a
to undefined identifier: a
Entornos y procedimientos locales
4.17
Procedimientos y entornos locales
(define a 3)
(define x 0)
(define f
(lambda (x y ) (+ x y )))
(define g
(lambda (x y ) (+ x y a)))
(define h
(lambda (x y ) (+ x y a b)))
( f 1 2)
( g 1 2)
( h 1 2)
Informática
=>
=>
=>
3
6
reference to undefined identifier: b
Entornos y procedimientos locales
4.18
Procedimientos y entornos locales
(define a 2)
(define f (lambda (x ) (∗ a x )))
( f 5)
=>
10
(define g
(lambda (y )
(let ((a 3))
(f y ))))
( g 5)
=>
10
(define h (lambda (a) (f 5)))
( h 3)
Informática
=>
10
Entornos y procedimientos locales
4.19
Bibliografía
[Abelson–96]
Cap. 1: “Building abstractions with procedures”.
[Springer–94]
Cap. 5: “Locally defined procedures”.
Informática
Entornos y procedimientos locales
4.20
Descargar