Clase 5 - Paradigma Funcional Parte 2

Anuncio
Modelos de Desarrollo de Programas
Y Programación Concurrente
Clase N° 5:
Comparación de algunas expresiones entre C y en Scheme
“C”
SCHEME
3 + 4 *5
( + 3 ( * 4 5 ))
(a == b) && (a! = 0)
(and(= a b ) (not (= a 0)))
gcd(10,35)
(gcd 10 35)
Gcd
gcd
Getchar()
(read-char)
Año:2011
Modelos de Desarrollo de Programas
Y Programación Concurrente
Clase N° 5:
Año:2011
Comparación de algunas expresiones entre C y en Scheme
La regla de evaluación de Scheme representa una evaluación de orden
aplicativo: todas las sub-expresiones se evalúan primero de modo que el árbol de
la expresión resulta evaluado desde las hojas hasta la raíz.
Por ej. La expresión (* (+ 2 3) (+ 4 5 ) se evalúan primero las dos adiciones y
después las expresión resultante , es decir el producto (* 5 9) .
*
+
2
+
3
4
5
Modelos de Desarrollo de Programas
Y Programación Concurrente
Clase N° 5:
Año:2011
Control de la ejecución:
Los ciclos se pueden realizar mediante llamadas recursivas pero la selección
debe ser provista por funciones explícitas. Las funciones básicas que se ocupan
de esto son la función if que es similar al constructor if-then-else, así como la
función cond (conditional) que es similar al constructor if –elsif .
(if (= a 0) 0
(/ 1 a))
(cond(( = a 0) 0)
If a = 0 entonces devuelve 0
else devuelve a 1/a
If a=0 entonces devuelve 0
(( = a 1 ) 1)
elsif a=1 entonces devuelve 1
(else (/1 a)))
else devuelve 1/a
Modelos de Desarrollo de Programas
Y Programación Concurrente
Clase N° 5:
Año:2011
Estructuras de Datos en Scheme
- La estructura de datos básica en Scheme es la lista, todas las otras
estructuras deben presentarse en forma de listas. Esto no es difícil, ya que
una lista puede representar un arreglo, un registro o cualquier otro dato.
- Por ej. A continuación mostramos una representación de lista de un árbol de
búsqueda binario:
(“caballo”(“vaca”() (“perro” () () ))
(“cebra” (“bisonte” () () ) () ))
Modelos de Desarrollo de Programas
Y Programación Concurrente
Clase N° 5:
Año:2011
Estructuras de Datos en Scheme
Un nodo de este árbol es una lista de tres elementos (name left right)
donde name es una cadena, y left y right son lo árboles hijos que
también son listas.
Por lo tanto la lista dada representa el árbol:
“caballo”
“vaca”
()
“perro”
()
“cebra”
bisonte“
() ()
()
()
Modelos de Desarrollo de Programas
Y Programación Concurrente
Clase N° 5:
Año:2011
Para usar las listas con efectividad debemos tener un conjunto de adecuado de
funciones que operen dichas listas.
Scheme tiene muchas funciones de lista predefinidas, pero las funciones básicas
comunes a todos los sistemas LISP son las de selector car (contenido del registro
de direcciones) y cdr (contenido del registro de decremento) que calculan el
principio y el final de una lista y las funciones de constructor cons, que añade un
nuevo principio a una lista existente.
Por lo tanto:
Si L es la lista (1 2 3) entonces:
(car L)
1
(cdr L)
(2 3 )
(cons 4 L)
(4 1 2 3 )
Modelos de Desarrollo de Programas
Y Programación Concurrente
Clase N° 5:
Año:2011
De acuerdo a esta concepción , una lista L es un puntero a una caja de dos
punteros:
Uno dirigido a su car y el otro a su cdr.
L
car L
1
El símbolo
Cdr L
2
3
representa la lista vacia( )
Descargar