Tema 4 - Dpto. Ciencias de la Computación e Inteligencia Artificial

Anuncio
Tema 4
Entornos y procedimientos
locales
José Antonio Alonso
María José Hidalgo
Álvaro Romero
Dpto. de Ciencias de la Computación e Inteligencia Articial
Universidad de Sevilla
Entornos locales
Contenido:
• Forma especial let.
• Forma especial let∗.
• Forma especial letrec.
• Procedimientos y entornos locales.
Informática
CcIa
Entornos y procedimientos locales
4.1
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
CcIa
Entornos y procedimientos locales
4.2
Forma especial let
(let ((variable1 valor1)
(variable2 valor2)
..
(variableN valorN))
expresión1
expresión2
..
expresiónM)
Informática
CcIa
Entornos y procedimientos locales
4.3
Forma especial let: ejemplos
(dene a 10)
(dene x 0)
(let ((x 3)
(y 2))
(∗ (+ x y ) a))
=> 50
(let ((x 3))
(let ((y 2)
(a (sqrt 4)))
(∗ (+ x y ) a)))
=> 10
Informática
(let ((x 3)
(y 2))
(∗ (+ x y ) b))
=> reference to undened identier: b
(let ((x 3))
(let ((y 2)
(a (sqrt 4)))
(∗ (+ x y ) b)))
=> reference to undened identier: b
CcIa
Entornos y procedimientos locales
4.4
Forma especial let: raices
(raices 1 −5 6) => (3 2)
(raices 1 2 3) => raices: discriminante negativo
(dene 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
CcIa
Entornos y procedimientos locales
4.5
Forma especial let: area-hexagono
(area-hexagono 1)
=> 2.598076211353316
(area-hexagono (sqrt (sqrt 3))) => 4.499999999999999
(dene 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
CcIa
Entornos y procedimientos locales
4.6
Forma especial let: asignación paralela
(let ((a 0)
(b (+ a 1))
(c (+ b 1)))
(list a b c))
=> reference to undened identier: a
(let ((a 0))
(let ((b (+ a 1)))
(let ((c (+ b 1)))
(list a b c))))
=> (0 1 2)
Informática
CcIa
Entornos y procedimientos locales
4.7
Forma especial let∗
(let∗ ((variable1 valor1)
(variable2 valor2)
..
(variableN valorN))
expresión1
expresión2
..
expresiónM)
Informática
CcIa
Entornos y procedimientos locales
4.8
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
CcIa
Entornos y procedimientos locales
4.9
Formas especiales let y let∗ y procedimientos recursivos
(let ((fact (lambda (n)
(if (zero? n)
1
(∗ n (fact (− n 1)))))))
(fact 4))
=> reference to undened identier: fact
(let∗ ((fact (lambda (n)
(if (zero? n)
1
(∗ n (fact (− n 1)))))))
(fact 4))
=> reference to undened identier: fact
Informática
CcIa
Entornos y procedimientos locales
4.10
Forma especial letrec
(letrec ((variable1 valor1)
(variable2 valor2)
..
(variableN valorN))
expresión1
expresión2
..
expresiónM)
Informática
CcIa
Entornos y procedimientos locales
4.11
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
CcIa
Entornos y procedimientos locales
4.12
Forma especial letrec: suma-elementos-it
(dene 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
CcIa
Entornos y procedimientos locales
4.13
Forma especial letrec: cambia-it
(dene 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
CcIa
Entornos y procedimientos locales
4.14
Procedimientos y entornos locales
(dene a 3)
(dene x 0)
(dene f
(lambda (x y ) (+ x y )))
(dene g
(lambda (x y ) (+ x y a)))
(dene h
(lambda (x y ) (+ x y a b)))
(f 1 2) => 3
(g 1 2) => 6
(h 1 2) => reference to undened identier: b
Informática
CcIa
Entornos y procedimientos locales
4.15
Procedimientos y entornos locales
(dene a 2)
(dene f (lambda (x) (∗ a x)))
(f 5) => 10
(dene g
(lambda (y )
(let ((a 3))
(f y ))))
(g 5) => 10
(dene h (lambda (a) (f 5)))
(h 3) => 10
Informática
CcIa
Entornos y procedimientos locales
4.16
Bibliografía
[Abelson96]
Cap. 1: Building abstractions with procedures.
[Springer94]
Cap. 5: Locally dened procedures.
Informática
CcIa
Entornos y procedimientos locales
4.17
Descargar