4.7 Operaciones sobre Objetos en Scheme

Documentos relacionados
4.7 Operaciones sobre Objetos en Scheme. Equivalencias y predicados de tipos, listas, números, caracteres, strings y vectores

Tema 3.- Predicados y sentencias condicionales

Abstracción de Datos y

GUÍA BÁSICA DE SCHEME v.4

CAPÍTULO IV: 4.1 Introducción a la. Programación Funcional

PROGRAMACIÓN DECLARATIVA

4.3 Recursión en Scheme. Recursión simple y asignación

4.3 Recursión en Scheme

Programación Declarativa

Aplicación de la Inducción Matemática Programación Funcional. Julio Ariel Hurtado Alegría Departamento de Sistemas Universidad del Cauca

CAPÍTULO IV: Programación Funcional

Programación Declarativa. Ingeniería Informática Cuarto curso. Primer cuatrimestre. Escuela Politécnica Superior de Córdoba Universidad de Córdoba

Tema 5.- Tipos de datos compuestos

Programación Declarativa. Ingeniería Informática Cuarto curso. Primer cuatrimestre. Escuela Politécnica Superior de Córdoba Universidad de Córdoba

Programación Declarativa. Ingeniería Informática Especialidad de Computación Cuarto curso. Primer cuatrimestre

4.5 Ligado de Variables en Scheme

Lenguajes de Programación Programación funcional

Programación Declarativa. Ingeniería Informática Especialidad de Computación Cuarto curso. Primer cuatrimestre

Lenguajes de Inteligencia Artificial Segundo curso. Primer cuatrimestre

Programación Declarativa

Tema 2. Tipos predefinidos

Resumen de LISP. Javier Gil Julio, 2011

Programación Declarativa

Un calculadora avanzada... y algo más!

Programación Interactiva

Tema 2: Introducción a Scheme. Sesión 4: Introducción a Scheme (2)

Programación Funcional Lisp-Scheme

Apunte Laboratorio ALPI - El lenguaje de programación Pascal

Tema 4: Programación funcional avanzada en Scheme

Valores Booleanos Interpretación #t Cierto #f Falso

Tipos de Datos en C. Palabras reservadas en C

Principios de Computadoras II

CONTROLADORES DE FLUJO DE PROGRAMA

Estructura de un programa en Java. Tipos de datos básicos. class miprimerprograma{ // comentario, no es parte del programa

Tema 3: Características de la programación funcional

Fundamentos PHP. El término puntuación nos referimos a la sintaxis usada en PHP para la terminación de una línea de código (;)

GUÍA DE TRABAJO N 1 C# Ing. Néstor Raúl Suarez Perpiñan Página 1 de 13

Procedimientos Definidos Localmente

Informática General 2016 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales

Tema 3. Listas Recursión sobre datos

Tipos de datos y clases de tipos

3. Conceptos elementales de programación 1. léxico. cadenas literales: cualquier cosa dentro de una línea

Programación n Orientada a Objetos Sentencias Java Parte I. Ing. Julio Ernesto Carreño o Vargas MsC.

Programación Funcional Lisp-DrScheme Primera Parte. Dr. Oldemar Rodríguez Rojas Escuela de Informática Universidad de Nacional

FUNDAMENTOS DE PROGRAMACIÓN LABORATORIO SESIÓN 2

Programación 1 - Práctica 0, recargada.

Tema 2: La clase string. Índice. Notas. Programación 2. Curso Notas. Definición Declaración Entrada / salida Métodos Operaciones

GLOSARIO 1. Qué es bit y byte? Bit: Es la unidad mínima de información. Puede ser 0 o 1. Byte: Es el conjunto de 8 bits. Ejemplo:

Abstracción de procedimientos

Tema II: Introducción al Lenguaje Funcional

Una clasificación de los tipos de datos existentes en los diferentes lenguajes de programación se presenta a continuación:

1. Lenguaje Pascal. 2. Módulos de un Programa. 3. Tipos de Datos más utilizados. 4. Declaración de Variables

Informática General 2018 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales

FUNDAMENTOS DE OBJECT PASCAL

Introducción a Python Qué es Python?

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Introducción a Haskell. El lenguaje Haskell

Tema 7: Programación imperativa. Sesión 21: Programación imperativa (2)

Datos Elementales y formato de un programa en Java

Abstracción Sintáctica y Abstracción de Datos

1.2 Uso del software como una calculadora. Iniciación a los operadores y almacenamiento de datos.

III. Generación de Código orientado a objetos

Programación Orientada a Objetos Sentencias Java Parte I Ing. Julio Ernesto Carreño Vargas MsC.

Docente: Juan Carlos Pérez P. Alumno : Fecha : Nota:

FUNDAMENTOS DE INFORMATICA

Tema 2.- Expresiones y funciones

Tema 3: Características de la programación funcional. Sesión 6: El paradigma funcional (2)

6. Estructuras básicas de control 1. Pseudocódigo

INTRODUCCIÓN A LA PROGRAMACIÓN. 1º Bachillerato

Introducción al MATLAB

Manual de turbo pascal

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C

Introducción a la programación: Algoritmos

Metodología de Programación I Tutorial de Prolog (3/3)

Tema 6: Estructuras de datos recursivas

Trata siempre de documentar tus funciones, pues es ayuda para el usuario.

RESUMEN DE CONCEPTOS

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Semántica Denotacional

RESUMEN DE CONCEPTOS TEÓRICOS MATEMÁTICAS 1º ESO. CURSO

API LENGUAJE DE PROGRAMACIÓN. Algoritmia y Programación

Tema 2.- Objetos y mensajes

INFOTECH MÓDULO 3 CURSO. Sintaxis del lenguaje de programación JAVA. Lógica y Lenguaje de Programación

introducción a la computación

Resolución de Problemas y Algoritmos Segundo cuatrimestre 2015 Clase 11: Construcción de primitivas (Funciones)

Números enteros (cortos, largos y sin signo) Números reales (precisión simple y doble) Carácter y cadenas de caracteres. Lógicos.

Introducción a Haskell. Cecilia Manzino

INTRODUCCIÓN A FORTRAN 77

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

PHP: Lenguaje de programación

Sistemas Operativos sesión 12: tuberías

Inducción, Recursión y Alcance. Inducción, Recursión y alcance. Inducción, Recursión y Alcance. Inducción, Recursión y Alcance

Transcripción:

4.7 Operaciones sobre Objetos en Scheme Equivalencias y predicados de tipos, listas, números, caracteres, strings y vectores Ejemplos de Equivalencia (eq? a a) ;=> #t (eq? 3.1 3.1) ;=> () (eq? (cons a b)(cons a b)) ;=> () (eqv? a a) ;=> #t (eqv? 3.1 3.1) ;=> #t (eqv? (cons a b)(cons a b)) ;=> () (equal? a a) ;=> #t (equal? 3.1 3.1) ;=> #t (equal? (cons a b)(cons a b)) ;=> #t a) Equivalencias (eq? obj 1 obj 2 ) retorno: #t si son idénticos (eqv? obj 1 obj 2 ) retorno: #t si son equivalentes eqv? es similar a eq?, salvo que no es dependiente de la implementación, pero es algo más costoso. eq? no permite comparar en forma fiable números b) Predicados de Tipos (boolean? obj) retorno: #t si obj #t o #f (null? obj) retorno: #t si obj #f o lista vacia (pair? obj) retorno: #t si obj es un par equal? (equal? obj 1 obj 2 ) retorno: #t si tienen la misma estructura y contenido equal? es similar a eqv?, salvo que se aplica también para strings, pares y vectores. Es más costoso que eqv? y eq?, Tipos de Números (number? obj) retorno: #t si obj es número (complex? obj) retorno: #t si obj es número complejo (real? obj) retorno: #t si obj es número real (rational? obj) retorno: #t si obj es número racional (integer? obj) retorno: #t si obj es número entero 1

Otros Tipos (char? obj) retorno: #t si obj es un caracter (string? obj) retorno: #t si obj es un string (vector? obj) retorno: #t si obj es un vector (symbol? obj) retorno: #t si obj es un símbolo (procedure? obj) retorno: #t si obj es un procedimiento Otros Operadores con Listas (list-ref list n) retorno: elemento #n (basado en 0) de list (list-tail list n) #n (append list...) retorno: concatenación de list... (reverse list) retorno: list en orden invertido c) Listas El par es la estructura más fundamental de los tipos de objetos Los pares normalmente se usan para construir listas Las listas son secuencias ordenadas donde cada elemento ocupa el car de un par y el cdr del par del último elemento es la lista vacía. Si no se cumple lo anterior, es una lista impropia Membresía en Listas (memq obj list) obj si es encontrado, sino #f (memv obj list) obj si es encontrado, sino #f (member obj list) obj si es encontrado, sino #f Usan eq? y eqv? y equal? respectivamente Operadores Básicos con Listas (list obj...) retorno: una lista de elementos obj... (list? obj) retorno: #t si obj es una lista propia (length list) retorno: el número de elementos de list d) Listas Asociativos (Hash tables) Una lista asociativa (alist) es una lista propia cuyos elementos son pares. Un par tiene la forma (clave. valor) Asociaciones son útiles para almacenar información (valor) relacionada con un objeto (clave) 2

Operadores con Listas Asociativos Operadores Aritméticos (assq obj alist) retorno: primer elemento de alist cuyo car es equivalente a obj, sino #f (assv obj alist) retorno: primer elemento de alist cuyo car es equivalente a obj, sino #f (assoc obj alist) retorno: primer elemento de alist cuyo car es equivalente a obj, sino #f Usan eq? y eqv? y equal? respectivamente (+ num...) retorno: la suma de los argumentos num... (- num) retorno: cambio de signo de num (- num 1 num 2...) retorno: substracción a num 1 de num 2... (* num...) retorno: la multiplicación de num... (/ num) retorno: recíproco multiplicativo de num (/ num 1 num 2 num 3...) retorno: la división de num 1 por la multiplicación de num 2... e) Números Scheme soporta enteros, racionales, reales y complejos (que definen una jerarquía) Los números pueden ser exactos o inexactos Enteros y racionales pueden soportan precisión arbitraria Números inexactos se representan en punto flotante Los complejos se representan como un par, usando coordenadas polares o rectangulares Predicados con Números (zero? num) retorno: #t si num es cero (positive? num) retorno: #t si num es positivo (negative? num) retorno: #t si num es negativo (even? num) retorno: #t si num es par (odd? num) retorno: #t si num es impar Operadores con Números Operadores con Enteros (exact? num) retorno: #t si num es exacto (inexact? num) retorno: #t si num es inexacto (= num 1 num 2...) retorno: #t si los números son iguales (op real 1 real 2...) retorno: #t si los números cumplen la relación op, con op en {<, >, <=,>=} (no está definido para complejos) (quotient int 1 int 2 ) retorno: el cuociente de int 1 y int 2 (remainder int 1 int 2 ) retorno: el residuo de int 1 y int 2 (modulo int 1 int 2 ) retorno: el módulo entero de int 1 y int 2 (gcd int...) retorno: máximo común divisor de num (lcm int...) retorno: mínimo común múltiplo de num... 3

Operadores con Reales Predicados de Caracteres (truncate real) retorno: truncar a entero hacia cero (round real) retorno: rondear a entero más cercano (abs real) retorno: valor absoluto (max real...) retorno: máximo de real... (min real...) retorno: mínimo de real... (char=? char 1 char 2...) (char<? char 1 char 2...) (char>? char 1 char 2...) (char<=? char 1 char 2...) (char>=? char 1 char 2...) retorno: #t si relación es verdadera, sino #f Relaciones son sensibles a mayúsculas Operadores char-ci@? son insensibles Funciones Matemáticas Otros Operadores con Caracteres (sqrt num) retorno: raíz cuadrada de num (exp num) retorno: e elevado a la potencia de num (log num) retorno: el logaritmo natural de num (sin num) retorno: el seno de num (cos num) retorno: el coseno de num (tan num) retorno: la tangente de num (char-alphabetic? char) retorno: #t si char es letra (char-number? char) retorno: #t si char es número (char-lower-case? letter) retorno: #t si char es letra minúscula (char-upper-case? letter) retorno: #t si char es letra mayúscula (char->integer char) retorno: código del carácter char (integer->char int) retorno: carácter con código int f) Caracteres Representan objetos atómicos (letras, números, caracteres especiales) Se escriben con el prefijo #\ Ejemplos: #\a #\newline #\space carácter a cambio de línea espacio en blanco g) Strings Representan cadenas o secuencias de caracteres Se emplean en mensajes o buffers de caracteres Se escriben entre citación doble; doble citación se introduce en el texto con \ Se indexan con base en 0 Ejemplo: Hola \ Ohhh\ 4

Predicados de Strings Operadores con Vectores (string=? string 1 string 2...) (string<? string 1 string 2...) (string>? string 1 string 2...) (string<=? string 1 string 2...) (string>=? string 1 string 2...) retorno: #t si relación es verdadera, sino #f Relaciones son sensibles a mayúsculas Operadores string-ci@? son insensibles (vector obj...) retorno: un vector con objetos obj... (make-vector n) retorno: un vector de largo n (vector-length vector) retorno: largo de vector (vector-ref vector n) retorno: el elemento n de vector Otros Operadores con Strings (string char...) retorno: un string que contiene char... (make-string n) retorno: un string de n caracteres (indefinido) (string-length string) retorno: largo del string (string-ref string n) retorno: el carácter n (desde 0) del string (string-set! string n char) acción: cambia el carácter n de string a char (string-copy string) retorno: una copia de string (string-append string...) retorno: concatenación de string... Más Operadores con Vectores (vector-set! vector n obj) acción: define elmto n de vector como obj (vector-fill! vector obj) acción: reemplaza cada elemento de vector con obj (vector->list vector) retorno: una lista con elementos de vector (list->vector list) retorno: una vector con elementos de lista list h) Vectores Forma más conveniente y eficiente de listas en algunas aplicaciones A diferencia de listas, el acceso a un elemento se hace en tiempo constante Al igual que strings, se referencian con base 0 Elementos pueden ser de cualquier tipo Se escriben como lista, pero precedidos por # Ejemplo: #(a b c) 4.8 Operaciones de Entrada y Salida en Scheme 5

Entrada y Salida Toda E/S se realiza por puertos. Un puertos es un puntero a un flujo (posiblemente infinito) de caracteres (e.g. archivo) Un puerto es un objeto de primera clase El sistema tiene dos puertos por defecto: entrada y salida estándar (normalmente es el terminal en un ambiente interactivo) Cuando se agotan los datos de entrada se retorna el objeto especial eof Ejemplos de Entrada (input-port? (a b c)) => unspecified (input-port? (current-input-port)) => #t (input-port? (open-input-file f.dat )) => #t (let ((p (open-input-file mi_archivo ))) (let leer ((x (read p))) (if (eof-object? x) (begin (close-input-port p) ()) (cons x (leer (read x)))))) Operaciones de Entrada (1/2) (input-port? obj) retorno: #t si obj es puerto de entrada (current-input-port) retorno: puerto de entrada actual (open-input-file filename) retorno: nuevo puerto de entrada asociado a archivo filename (call-with-input-file file proc) acción: abre file y llama a proc con puerto abierto como parámetro; luego cierra puerto retorno: valor de evaluación de proc (close-input-port input-port) acción: cierra puerto de entrada Otro Ejemplo de Entrada (define read-word (lambda (p) (list->string (let leer_entrada () (let ((c (peek-char p))) (cond ((eof-object? c) '()) ((char-alphabetic? c) (read-char p) (cons c (leer_entrada ))) (else '()))))))) ;=> read-word (read-word (current-input-port)) hola ;=> "hola" Operaciones de Entrada (2/2) (eof-object? obj) retorno: #t si obj es fin de archivo (read) (read input-port) retorno: próximo objeto de input-port (read-char) (read-char input-port) retorno: próximo carácter de input-port (con consumo) (peek-char) (peek-char input-port) retorno: próximo carácter de input-port (sin consumo) Operaciones de Salida (1/2) (output-port? obj) retorno: #t si obj es puerto de salida (current-output-port) retorno: puerto de salida actual (open-output-file file) retorno: nueva puerto de salida asociado a archivo file (call-with-output-file file proc) acción: abre file y llama a proc con puerto abierto como parámetro; luego cierra puerto retorno: valor de evaluación de proc (close-output-port output-port) acción: cierra puerto de salida 6

Operaciones de Salida (2/2) Operaciones Especiales de E/S (write obj) (write obj output-port) acción: escribe obj a output-port (display obj) (display obj output-port) acción: escribe obj a output-port (write-char char) (write-char char output-port) acción: escribe char a output-port (newline) (newline output-port) acción: escribe nueva línea a output-port (transcript-on file) acción: inicia registro en file la sesión interactiva de Scheme (transcript-off) acción: termina de registrar sesión (load file) acción: carga file leyendo y evaluando secuencialmente las expresiones contenidas. Observaciones a E/S write escribe objetos que luego pueden ser leídos con read Strings se escriben con citación doble Un carácter se escribe con prefijo #\ display se usa normalmente para escribir objetos que no serán leídos Strings y caracteres no escriben doble citación o #\ write-char y read-char escriben y leen un único carácter sin usar #\ Ejemplo de E/S (define copy-file (lambda (infile outfile) (call-with-input-file infile (lambda (iport) (call-with-output-file outfile (lambda (oport) (do ((c (read-char iport) (read-char iport))) ((eof-object? c)) (write-char c oport)))))))) ;=> copy-file (copy-file infile outfile ) ;=> #t 7