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( )