Tema 2: Introducción a Scheme Sesión 3: Introducción a Scheme (1) martes 15 de febrero de 2011 Referencias • DrRacket (http://racket-lang.org/ ) • A brief tour of DrScheme (http://www.plt-scheme.org/software/drscheme/ tour/ ) • Structure and Interpretation of Computer Programs (http://mitpress.mit.edu/ sicp/full-text/book/book.html ), Abelson y Sussman, MIT Press 1996 (pp.1-13), en concreto los capítulos 1.1.1.-1.1.4, 1.1.6 SICP: The elements of programming : Expressions, Evaluation Combinations, Conditional Expressions and Predicates, Naming and Environment , Compound procedures • Teach yourself Scheme (versión HTML , versión PDF ) • Simply Scheme online martes 15 de febrero de 2011
15
Embed
Tema 2: Introducción a Scheme - RUA: Principalrua.ua.es/dspace/bitstream/10045/19672/3/tema2.pdf · ... MIT Press 1996 (pp.1-13), ... ligado a cursos de introducción a la computación
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Tema 2: Introducción a Scheme
Sesión 3: Introducción a Scheme (1)
martes 15 de febrero de 2011
Referencias
• DrRacket (http://racket-lang.org/)
• A brief tour of DrScheme (http://www.plt-scheme.org/software/drscheme/tour/)
• Structure and Interpretation of Computer Programs (http://mitpress.mit.edu/sicp/full-text/book/book.html), Abelson y Sussman, MIT Press 1996 (pp.1-13), en concreto los capítulos 1.1.1.-1.1.4, 1.1.6 SICP: The elements of programming: Expressions, Evaluation Combinations, Conditional Expressions and Predicates, Naming and Environment, Compound procedures
• Teach yourself Scheme (versión HTML, versión PDF)
• Simply Scheme online
martes 15 de febrero de 2011
Scheme como lenguaje de programación
• Dialecto de LISP
• MIT 1975, Guy L. Steel y Gerarld J. Sussman
• Lenguaje académico, ligado a cursos de introducción a la computación en universidades de EEUU (Libro SICP, Abelson y Sussman)
• Lenguaje para iniciar a la programación en los institutos en EEUU (Bootstrapworld o How to Design Programs)
martes 15 de febrero de 2011
Scheme es actual
• Colección de programas en Scheme (http://www.rodoval.com/paginalen.php?len=Scheme)
• Scheme Gimp (http://gimp.org.es/tutoriales/schemebasic/) , Scheme está dentro de Gimp para extender la herramienta de tratamiento de imágenes
• Recetas en Scheme (http://schemecookbook.org/Cookbook/WebHome)
• PLaneT (http://planet.plt-scheme.org/) , un repositorio de paquetes escritos en Scheme.
'hola(symbol 'hola-que<>)(symbol->string 'hola-que<>)'mañana'lápiz ; aunque sea posible, no vamos a usar acentos en los símbolos; pero sí en los comentarios(symbol? 'hola) ; #t(symbol? "hola") ; #f(symbol? #f) ; #f(equal? 'hola 'hola)(equal? 'hola "hola")
martes 15 de febrero de 2011
Abstracción: Forma especial define para dar valores a variables
(define <símbolo> <expresión>) Sintaxis:
(define pi 3.14159)(sin (/ pi 2))(define a (+ 2 (* 3 4)))
Semántica:1. Se evalúa la <expresión>2. El resultado de la evaluación queda asociado al <símbolo>
martes 15 de febrero de 2011
Abstracción: Forma especial define para crear funciones
• A brief tour of DrScheme (http://www.plt-scheme.org/software/drscheme/tour/)
• Structure and Interpretation of Computer Programs (http://mitpress.mit.edu/sicp/full-text/book/book.html), Abelson y Sussman, MIT Press 1996 (pp.1-13), en concreto los capítulos 1.1.1.-1.1.4, 1.1.6 SICP: The elements of programming: Expressions, Evaluation Combinations, Conditional Expressions and Predicates, Naming and Environment, Compound procedures
• Teach yourself Scheme (versión HTML, versión PDF)
• Simply Scheme online
miércoles 16 de febrero de 2011
Más sobre símbolos
(define a (+ 1 2))(define b ‘hola)(define c “pp”) 3 hola pp
a b c
- Cuando definimos un identificador (símbolo), queda ligado o asociado (bind) al resultado de la evaluación de la expresión de la parte derecha del define:
- Una expresión en Scheme puede ser simplemente un símbolo, que Scheme evaluará y devolverá su valor
> a3> c“pp”
- Los nombres de funciones también son símbolos y Scheme también los evalúa:
sin+(define (cuadrado x) (* x x))
proc
cuadrado
proc
+
proc
sin
miércoles 16 de febrero de 2011
Eval y quote
• Los símbolos son datos primitivos: pueden ligarse a otros símbolos o pasarse como parámetro
• quote se utiliza para que su argumento no se evalúe (azúcar sintáctico del lenguaje: tilde ‘)
• eval evalúa los argumentos que se le pasan (lenguaje Pretty Big en DrRacket). Funcionamiento: eval evalúa el argumento que recibe (siguiendo el modelo de evaluación de Scheme) y lo devuelve nuevamente evaluado
(define a ‘hola)(define hola 5)a --> hola‘a --> a(eval ‘a) --> hola(eval a) --> 5
5hola
holaa
miércoles 16 de febrero de 2011
Recursión
(define (factorial x) (if (= x 0) 1 (* x (factorial (- x 1)))))
(define (suma-hasta x) (if (= 0 x) 0 (+ x (suma-hasta (- x 1)))))
(list 1 2 3 4) ; list crea una lista'(1 2 3 4) ; otra forma de definir la misma lista(car '(1 2 3 4)) ; primer elemento de la lista(cdr '(1 2 3 4)) ; resto de la lista(cons 1 '(2 3 4)) ; devuelve una nueva lista con un nuevo elemento a su cabeza(append '(1) '(2 3 4) '(5 6)) ; construye una lista nueva concatenando'() ; lista vacía(cdr '(1)) ; devuelve la lista vacía(null? '(1)) ; comprueba si una lista está vacía‘(hola que tal) ; quote no evalúa los argumentos(list hola que tal) ; list evalúa sus argumentos
miércoles 16 de febrero de 2011
Programas ejemplo
; Función (lista-hasta x) que devuelve una lista de números 1..x en orden decreciente
(define (lista-hasta x) (if (= x 0) '() (cons x (lista-hasta (- x 1)))))
; Función (potencias-2 x) que devuelve una lista con las potencias de 2 hasta x
(define (potencias-2 x) (if (= x 0) '(1) (append (list (* 2 (car (potencias-2 (- x 1))))) (potencias-2 (- x 1)))))
miércoles 16 de febrero de 2011
Programas ejemplo
; Función (filtra-divisores lista x) que devuelve una lista con los números de la lista original que son divisores de x