12.07.2015 Views

Manual de referencia de Scheme

Manual de referencia de Scheme

Manual de referencia de Scheme

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Manual</strong> <strong>de</strong> <strong>referencia</strong> <strong>de</strong> <strong>Scheme</strong> 1El lenguaje <strong>de</strong> programación <strong>Scheme</strong>En cualquier lenguaje tenemos palabras que se combinan siguiendo ciertas reglas paraformar frases con signicado. A su vez, estas palabras se forman uniendo las letras <strong>de</strong>un abecedario. <strong>Scheme</strong>, como lenguaje <strong>de</strong> programación, utiliza <strong>de</strong> manera análoga a laspalabras los <strong>de</strong>nominados símbolos y éstos se forman uniendo las letras <strong>de</strong>l alfabeto (sindistinguir mayúsculas <strong>de</strong> minúsculas), los dígitos <strong>de</strong>l 0 al 9 y cualquier otro carácter queaparezca en el teclado salvo:( ) [ ] { } ; , "' ` # \ya que tienen un signicado especial, similar al que tienen los signos <strong>de</strong> puntuación.Los caracteres:+ - .también son especiales y no <strong>de</strong>ben aparecer en primer lugar en un símbolo. Los númerosno se consi<strong>de</strong>ran símbolos en <strong>Scheme</strong>.Un símbolo que es usado para representar un valor se <strong>de</strong>nomina variable. El intérprete<strong>de</strong>terminará el signicado <strong>de</strong> cada variable; los números tienen su valor usual.Siguiendo la analogía con los lenguajes el equivalente en <strong>Scheme</strong> a las frases son lasexpresiones, que pue<strong>de</strong>n consistir en un símbolo, un número o una lista, es <strong>de</strong>cir, unparéntesis izquierdo, seguido <strong>de</strong> expresiones separadas por espacios en blanco, y paraterminar un paréntesis <strong>de</strong>recho. La primera <strong>de</strong> dichas expresiones <strong>de</strong>be evaluar a unprocedimiento, evaluándose las restantes como los argumentos <strong>de</strong>l mismo.NotaciónEn lo que sigue utilizaremos la siguiente notación al escribir las expresiones:(procedimiento expresion 1 ...expresion k )es <strong>de</strong>cir, el nombre <strong>de</strong>l procedimiento aparecerá en negrita y los argumentos en itálica.A<strong>de</strong>más tendremos en cuenta que si el nombre <strong>de</strong> un argumento es el nombre <strong>de</strong> untipo (ver el apartado PREDICADOS DE TIPO), entonces el argumento <strong>de</strong>be ser <strong>de</strong>l tiponombrado . Usaremos el siguiente convenio:z número complejo l listax número real cter caráctern número entero cad ca<strong>de</strong>nak número natural proc procedimientoobj, expresion, ex <strong>de</strong> cualquier tipoexpresiones sucesión <strong>de</strong> expresionesUtilizaremos los corchetes para <strong>de</strong>notar expresiones opcionales y los puntos suspensivospara <strong>de</strong>notar varias ocurrencias.(procedimiento obj 1 ...obj k ) Indica que procedimiento es <strong>de</strong> aridad variable(procedimiento obj 1 [obj 2 ]) Indica que procedimiento tiene dos argumentos yel segundo es opcionalA continuación enumeraremos las expresiones más usuales seguidas <strong>de</strong> su valor.CcIa


2 <strong>Manual</strong> <strong>de</strong> <strong>referencia</strong> <strong>de</strong> <strong>Scheme</strong>Predicados <strong>de</strong> tipo(symbol? obj) Si obj es <strong>de</strong> tipo símbolo entonces #t; e.o.c. #f.(procedure? obj) Si obj es <strong>de</strong> tipo procedimiento entonces #t; e.o.c. #f.(number? obj) Si obj es <strong>de</strong> tipo número entonces #t; e.o.c. #f.(pair? obj) Si obj es <strong>de</strong> tipo par punteado entonces #t; e.o.c. #f.(null? obj) Si obj es la lista vacía entonces #t; e.o.c. #f.(boolean? obj) Si obj es uno <strong>de</strong> los valores <strong>de</strong> verdad (o booleanos), #to #f, entonces #t; e.o.c. #f.(vector? obj)(char? obj)(string? obj)Si obj es <strong>de</strong> tipo vector entonces #t; e.o.c. #f.Si obj es <strong>de</strong> tipo carácter entonces #t; e.o.c. #f.Si obj es <strong>de</strong> tipo ca<strong>de</strong>na entonces #t; e.o.c. #f.Ningún objeto verica más <strong>de</strong> uno <strong>de</strong> los predicados anteriores; otro predicado útil es:(list? obj) Si obj es <strong>de</strong> tipo lista entonces #t; e.o.c. #f.Predicados <strong>de</strong> igualdad(= z 1 [z 2 ...z k ]) Igualdad numérica entre los argumentos.(eq? obj 1 obj 2 ) Igualdad simbólica.(eqv? obj 1 obj 2 ) Igualdad numérico-simbólica.(equal? obj 1 obj 2 ) Igualdad <strong>de</strong> valores.expresion(<strong>de</strong>fine simbolo obj)(quote obj) ≡ 'objVariables y literalesValor <strong>de</strong> expresion.Le asigna a simbolo el valor <strong>de</strong> obj.obj.Los números, caracteres, ca<strong>de</strong>nas y valores <strong>de</strong> verdad (o booleanos), evalúan a si mismospor lo que no necesitan quote.(let([(simbolo1 obj 1 ).(simbolo k obj k )])ex 1 [ex 2 ...ex r ])(Todos los simbolo i <strong>de</strong>ben ser distintos). Evalúacada obj j , en un entorno local, asigna a cadasimbolo s el valor <strong>de</strong> obj s y a continuación evalúa<strong>de</strong> forma consecutiva ex 1 ...ex r , <strong>de</strong>volviendo elvalor <strong>de</strong> la última.CcIa


<strong>Manual</strong> <strong>de</strong> <strong>referencia</strong> <strong>de</strong> <strong>Scheme</strong> 3(let*([(simbolo 1 obj 1 ).(simbolo k obj k )])ex 1 [ex 2 ...ex r ])(letrec variables cuerpo)(set! simbolo expresion)En un entorno local, asigna, <strong>de</strong> manera secuencial,a cada simbolo s el valor <strong>de</strong> obj s y a continuaciónevalúa <strong>de</strong> forma consecutiva ex 1 ...ex r ,<strong>de</strong>volviendo el valor <strong>de</strong> la última.Similar a let, pero permite hacer <strong>de</strong>niciones<strong>de</strong> procedimientos recursivos.Asigna el valor <strong>de</strong> expresion a simbolo, que ya<strong>de</strong>be tener asignado algún valor. Devuelve unvalor no especíco.(lambda argumentos cuerpo)argumentos pue<strong>de</strong> ser:(simbolo 1 ...simbolo k )variable(simb 1 ...simb k . variable)Expresiones lambdaDevuelve un procedimiento.cuerpo: Sucesión <strong>de</strong> expresiones que <strong>de</strong>scriben la función.(<strong>de</strong>fine (simb simb 1 ...simb k )cuerpo)(<strong>de</strong>fine (simbolo . variable)cuerpo)(<strong>de</strong>fine (simb s 1 ...s k . var)cuerpo)Lista <strong>de</strong> símbolos (todos distintos) que representana cada argumento <strong>de</strong> la función, la cual será, portanto, <strong>de</strong> aridad la longitud <strong>de</strong> dicha lista.Símbolo que representa a una lista con los argumentos.Por tanto será <strong>de</strong> aridad variable.Los primeros k argumentos se guardan en las variablessimb 1 a simb k . El resto <strong>de</strong> argumentos seguardan en una lista en variable. El procedimientoes, por tanto, <strong>de</strong> aridad al menos k.Equivalente a(<strong>de</strong>fine simb(lambda (simb 1 ...simb k )cuerpo))Equivalente a(<strong>de</strong>fine simbolo(lambda variablecuerpo))Equivalente a(<strong>de</strong>fine simb(lambda (s 1 ...s k . var)cuerpo))Abstracción <strong>de</strong> procedimientos(apply proc ex 1 [ex 2 ...ex k ]) (ex k una lista), aplica proc con argumentos ex 1...ex k−1 y los elementos <strong>de</strong> ex k .CcIa


4 <strong>Manual</strong> <strong>de</strong> <strong>referencia</strong> <strong>de</strong> <strong>Scheme</strong>(map proc l 1 [l 2 ...l k ])(for-each proc l 1 [l 2 ...l k ])Aplica proc a cada elemento <strong>de</strong> l 1 ; si existe más<strong>de</strong> una lista, todas han <strong>de</strong> tener la misma longitudy aplica proc tomando como argumentosun elemento <strong>de</strong> cada lista, <strong>de</strong>vuelve la lista <strong>de</strong>los resultados.Aplica proc a cada elemento <strong>de</strong> l 1 ; si existe más<strong>de</strong> una lista, todas han <strong>de</strong> tener la misma longitudy aplica proc tomando como argumentosun elemento <strong>de</strong> cada lista, <strong>de</strong>vuelve un valor noespecíco.Procedimientos numéricos(+ [z 1 ...z k ]) Suma <strong>de</strong> los argumentos; sin argumentos, 0.(- z 1 [z 2 ...z k ]) Resta <strong>de</strong> los argumentos, asociando por la izquierda;con un solo argumento, −z 1 .(* [z 1 ...z k ]) Producto <strong>de</strong> los argumentos; sin argumentos, 1.(/ z 1 [z 2 ...z k ]) División <strong>de</strong> los argumentos asociando por la izquierda;con un solo argumento, 1/z.(sqrt z)(abs x) Valor absoluto <strong>de</strong> x.(sin z) Seno <strong>de</strong> z.(cos z) Coseno <strong>de</strong> z.(tan z) Tangente <strong>de</strong> z.(asin z) Arcoseno <strong>de</strong> z.(acos z) Arcocoseno <strong>de</strong> z.Raíz cuadrada principal <strong>de</strong> z (si z es real, la raíz cuadradapositiva).(atan z) Arcotangente <strong>de</strong> z.(max x 1 [x 2 ...x k ]) Máximo entre los argumentos.(min x 1 [x 2 ...x k ]) Mínimo entre los argumentos.(quotient n 1 n 2 ) (n 2 distinto <strong>de</strong> cero), cociente <strong>de</strong> n 1 entre n 2 .(remain<strong>de</strong>r n 1 n 2 ) (n 2 distinto <strong>de</strong> cero), resto <strong>de</strong> n 1 entre n 2 .(expt z 1 z 2 )zLa potencia z 2 1 (con 0 0 = 1).(exp z) La potencia e z .(log z) Logaritmo en base e <strong>de</strong> z.(gcd [n 1 ...n k ]) Máximo común divisor entre los argumentos; sin argumentos,0.CcIa


<strong>Manual</strong> <strong>de</strong> <strong>referencia</strong> <strong>de</strong> <strong>Scheme</strong> 5(lcm [n 1 ...n k ]) Mínimo común múltiplo entre los argumentos; sin argumentos,1.(floor x) Mayor entero menor o igual que x.(ceiling x) Menor entero mayor o igual que x.(truncate x) Parte entera <strong>de</strong> x.(round x)Entero más cercano a x, en caso <strong>de</strong> equidistancia númeroentero par más cercano.(exact->inexact z) El número inexacto numéricamente más cercano a z.(inexact->exact z) El número exacto numéricamente más cercano a z.Predicados numéricos(complex? obj)(real? obj)(rational? obj)(exact? z)(inexact? z)(integer? obj)(even? n)(odd? n)(zero? z)(positive? x)(negative? x)Si obj es un número complejo entonces #t; e.o.c. #f.Si obj es un número real entonces #t; e.o.c. #f.Si obj es un número racional entonces #t; e.o.c. #f.Si z es exacto, entonces #t; e.o.c #f.Si z es inexacto, entonces #t; e.o.c #f.Si obj es un número entero entonces #t; e.o.c. #f.Si n es par entonces #t; e.o.c. #f.Si n es impar entonces #t; e.o.c. #f.Si z es el cero entonces #t; e.o.c. #f.Si x es mayor estricto que cero entonces #t; e.o.c. #f.Si x es menor estricto que cero entonces #t; e.o.c. #f.Relaciones numéricas(> x 1 [x 2 ...x k ]) Los argumentos están en or<strong>de</strong>n <strong>de</strong>creciente.(< x 1 [x 2 ...x k ]) Los argumentos están en or<strong>de</strong>n creciente.(>= x 1 [x 2 ...x k ]) Los argumentos están en or<strong>de</strong>n no creciente.(


6 <strong>Manual</strong> <strong>de</strong> <strong>referencia</strong> <strong>de</strong> <strong>Scheme</strong>Pares(cons obj 1 obj 2 ) El par cuyo car es obj 1 y cuyo cdr es obj 2 .(car par)Primer elemento <strong>de</strong> par.(cdr par)Segundo elemento <strong>de</strong> par.Procedimientos sobre listas(cons obj lista)(list [obj 1 ...obj k ])(car lista)(cdr lista)(caar lista)(cadr lista).(cdddar lista)(cddddr lista)(append [lista 1 ...lista k ])(reverse lista)(length lista)(list-ref lista k)(list-tail lista k)(set-car! lista obj)(set-cdr! lista obj)Lista que resulta al incluir obj como primer elemento<strong>de</strong> lista.La lista <strong>de</strong> los argumentos; sin argumentos lalista vacía.Primer elemento <strong>de</strong> lista.Lista que resulta al quitarle el primer elementoa lista.Composiciones <strong>de</strong> car y cdr.Lista que resulta al unir los argumentos; sin argumentos,la lista vacía.Una lista con los mismos elementos que lista,pero dispuestos en or<strong>de</strong>n inverso.Longitud <strong>de</strong> lista.Elemento <strong>de</strong> lista que ocupa la k-ésima posición.Sublista <strong>de</strong> lista obtenida eliminando los k primeroselementos.Almacena obj como el car <strong>de</strong> lista y <strong>de</strong>vuelveun valor no especíco.Hace que el cdr <strong>de</strong> lista apunte a obj y <strong>de</strong>vuelveun valor no especíco.Predicados <strong>de</strong> pertenenciaTeniendo en cuenta que una sublista <strong>de</strong> una lista se obtiene por aplicaciones sucesivas <strong>de</strong>cdr.(memq obj lista) Primera sublista <strong>de</strong> lista cuyo primer elemento esigual que obj, comparando con eq?; e.o.c. #f.CcIa


<strong>Manual</strong> <strong>de</strong> <strong>referencia</strong> <strong>de</strong> <strong>Scheme</strong> 7(memv obj lista)(member obj lista)(assq obj lista-par)(assv obj lista-par)(assoc obj lista-par)Primera sublista <strong>de</strong> lista cuyo primer elemento esigual que obj, comparando con eqv?; e.o.c. #f.Primera sublista <strong>de</strong> lista cuyo primer elemento esigual que obj comparando con equal?; e.o.c. #f.Primer elemento <strong>de</strong> lista-par (una lista <strong>de</strong> parespunteados) cuyo primer elemento es igual que obj,comparando con eq?; e.o.c. #f.Primer elemento <strong>de</strong> lista-par (una lista <strong>de</strong> parespunteados) cuyo primer elemento es igual que obj,comparando con eqv?; e.o.c. #f.Primer elemento <strong>de</strong> lista-par (una lista <strong>de</strong> parespunteados) cuyo primer elemento es igual que obj,comparando con equal?; e.o.c. #f.(if testconsecuencia[alternativa])(cond(test 1 [expresiones 1 ]).(test k [expresiones k ])[(else [expresiones k+1 ])])(case clave((datos 1 ) expresiones 1 ).((datos k ) expresiones k )[(else expresiones k+1 )])Expresiones condicionalesSi test tiene como valor #f entonces alternativa(si no existe alternativa entonces un valor noespecíco), e.o.c. consecuencia.Evalúa test 1 ...test k sucesivamente hasta encontrarel primer test i que no tenga como valor#f, en cuyo caso evalúa en or<strong>de</strong>n las expresionesi <strong>de</strong>volviendo el valor <strong>de</strong> la última (si noexisten <strong>de</strong>vuelve el valor <strong>de</strong> dicho test i ). Si todotest i tiene como valor #f y existe la cláusulaelse, evalúa en or<strong>de</strong>n expresiones k+1 <strong>de</strong>volviendoel valor <strong>de</strong> la última; si no existen o no existecláusula else, <strong>de</strong>vuelve un valor no especíco.Evalúa clave y compara el resultado obtenidocon cada uno <strong>de</strong> los datos i , sucesivamente. Siencuentra alguno que es igual (comparando coneqv?) evalúa en or<strong>de</strong>n expresiones i <strong>de</strong>volviendoel valor <strong>de</strong> la última. Si el valor <strong>de</strong> clave es distintoa todos los datos i y existe la cláusula else,evalúa en or<strong>de</strong>n expresiones k+1 <strong>de</strong>volviendo elvalor <strong>de</strong> la última; si no existe cláusula else,<strong>de</strong>vuelve un valor no especíco.(not obj)(or [obj 1 ...obj k ])Operadores lógicosSi obj tiene como valor #f entonces #t; e.o.c. #f.Evalúa obj 1 ...obj k sucesivamente hasta el primeroque no tenga como valor #f y <strong>de</strong>vuelve su valor, e.o.c.#f; sin argumentos, #f.CcIa


8 <strong>Manual</strong> <strong>de</strong> <strong>referencia</strong> <strong>de</strong> <strong>Scheme</strong>(and [obj 1 ...obj k ])Evalúa obj 1 ...obj k sucesivamente hasta el primeroque tenga como valor #f, e.o.c. el valor <strong>de</strong> obj k ; sinargumentos, #t.Iteraciones(do((simbolo1 obj 1 [paso 1 ]).(simbolo k obj k [paso k ]))(test [ex 1 ...ex r ])[expresion 1.expresion s ])Cada simbolo i recibe el valor <strong>de</strong> obj i . En cadaiteración <strong>de</strong>l bucle se evalúa test:- si es #f se evalúan expresion 1 ...expresion ssucesivamente y se actualizan los valores <strong>de</strong>cada simbolo i según paso i (cuando existen).Comienza una nueva iteración.- si no, se evalúan ex 1 ...ex r sucesivamente<strong>de</strong>volviendo el valor <strong>de</strong> la última. Terminael bucle.Procedimientos sobre vectores(make-vector k [obj])(vector [obj 1 ...obj k ])(vector-ref vector k)(vector-length vector)(vector->list vector)(list->vector lista)(vector-set! vector k obj)(vector-fill! vector obj)Construye un vector con k elementos iguales a obj,si no existe obj el contenido <strong>de</strong>l vector es in<strong>de</strong>terminado.Construye un vector con k elementos, cada uno <strong>de</strong>los cuales es obj i .Elemento <strong>de</strong> vector que ocupa la posición k-ésima.Número <strong>de</strong> elementos <strong>de</strong> vector.Lista con los elementos <strong>de</strong> vector.Vector con los elementos <strong>de</strong> lista.Almacena obj en el k-ésimo elemento <strong>de</strong> vector,<strong>de</strong>vuelve un valor no especíco.Cambia cada elemento <strong>de</strong> vector por obj. Devuelveun valor no especíco.Procedimientos sobre caracteres(char->integer caracter) Código ASCII <strong>de</strong> caracter.(integer->char n) Carácter con código ASCII n.(char


<strong>Manual</strong> <strong>de</strong> <strong>referencia</strong> <strong>de</strong> <strong>Scheme</strong> 9(char? cter 1 [cter 2 ...cter k ])(char>=? cter 1 [cter 2 ...cter k ])(char=? cter 1 [cter 2 ...cter k ])(char-ci


10 <strong>Manual</strong> <strong>de</strong> <strong>referencia</strong> <strong>de</strong> <strong>Scheme</strong>(make-string k [caracter])(string [cter 1 ...cter k ])(string-ref ca<strong>de</strong>na k)(string-set! ca<strong>de</strong>na k cter)(substring ca<strong>de</strong>na k 1 k 2 )(string-append [cad 1 ...cad k ])(string->list ca<strong>de</strong>na)(list->string lista)(string-copy ca<strong>de</strong>na)(string-fill! ca<strong>de</strong>na cter)(string


<strong>Manual</strong> <strong>de</strong> <strong>referencia</strong> <strong>de</strong> <strong>Scheme</strong> 11(input-port? obj)(output-port? obj)(current-input-port)(current-output-port)(open-input-file chero)(open-output-file chero)Procedimientos <strong>de</strong> entrada y salida(call-with-input-file chero proc)(call-with-output-file chero proc)(with-input-from-file chero proc)(with-output-to-file chero proc)(eof-object? obj)(read [puerto])(read-char [puerto])(peek-char [puerto])(newline [puerto])Devuelve #t si obj es un puerto <strong>de</strong> entrada osalida, respectivamente; en caso contrario <strong>de</strong>vuelve#f.Devuelve el puerto <strong>de</strong> entrada o salida por <strong>de</strong>fecto(inicialmente el teclado y el monitor, respectivamente).Devuelve un puerto capaz <strong>de</strong> proporcionar caracteres<strong>de</strong>l chero, que <strong>de</strong>be existir.Devuelve un puerto capaz <strong>de</strong> escribir caracteresen chero, que es creado al evaluar la expresióny, por tanto, inicialmente no <strong>de</strong>be existir.Evalúan el procedimiento proc con unargumento: el puerto obtenido al abrirchero para entrada o salida, respectivamente.Se crea un puerto <strong>de</strong> entrada o salidaconectado a chero, convirtiéndose dichopuerto en el puerto por <strong>de</strong>fecto. Acontinuación, se evalúa proc sin argumentos.Devuelve #t si obj es un dato <strong>de</strong> tipo nal <strong>de</strong>chero y #f en caso contrario.Devuelve el siguiente objeto <strong>de</strong> <strong>Scheme</strong> que sepue<strong>de</strong> obtener <strong>de</strong>l puerto <strong>de</strong> entrada dado (oel puerto <strong>de</strong> entrada por <strong>de</strong>fecto, si se omite).Al llegar al nal <strong>de</strong>l chero conectado a puerto,<strong>de</strong>vuelve un objeto <strong>de</strong> tipo nal <strong>de</strong> chero.Devuelve el siguiente carácter que se pue<strong>de</strong> obtener<strong>de</strong>l puerto <strong>de</strong> entrada dado (o el puerto<strong>de</strong> entrada por <strong>de</strong>fecto, si se omite). Al llegaral nal <strong>de</strong>l chero conectado a puerto, <strong>de</strong>vuelveun objeto <strong>de</strong> tipo nal <strong>de</strong> chero.Devuelve el siguiente objeto <strong>de</strong> <strong>Scheme</strong> que sepue<strong>de</strong> obtener <strong>de</strong>l puerto <strong>de</strong> entrada dado (oel puerto <strong>de</strong> entrada por <strong>de</strong>fecto, si se omite),sin actualizar dicho puerto para que apunte alsiguiente carácter. Si no hay caracteres disponibles,<strong>de</strong>vuelve un objeto <strong>de</strong> tipo nal <strong>de</strong> chero.Escribe un objeto <strong>de</strong> tipo nal <strong>de</strong> línea en puerto(o el puerto <strong>de</strong> entrada por <strong>de</strong>fecto, si éste seomite). Devuelve un valor no especíco.CcIa


<strong>Manual</strong> <strong>de</strong> <strong>referencia</strong> <strong>de</strong> <strong>Scheme</strong> 13(make-posn n1 n2)(posn-x posicion)(posn-y posicion)(posn? obj)Devuelve el objeto <strong>de</strong> tipo posicion <strong>de</strong> coor<strong>de</strong>nadasn1 y n2.Devuelve las coor<strong>de</strong>nadas X e Y, respectivamente,<strong>de</strong> posicion.Devuelve #t si obj es un objeto <strong>de</strong> tipo posicion;en caso contrario <strong>de</strong>vuelve #f.Un color pue<strong>de</strong> representarse <strong>de</strong> dos formas distintas: como una ca<strong>de</strong>na (con el nombre<strong>de</strong>l mismo, p.e. red) o como un objeto <strong>de</strong> tipo rgb. Cualquiera <strong>de</strong> los procedimientosque toma color como argumento acepta cualquiera <strong>de</strong> las representaciones.(make-rgb rojo ver<strong>de</strong> azul)Dados tres números reales <strong>de</strong> 0 (oscuro) a 1 (claro)<strong>de</strong>vuelve un objeto <strong>de</strong> tipo rgb.(rgb-red rgb)(rgb-green rgb)(rgb-blue rgb)Devuelve los valores <strong>de</strong> rojo, ver<strong>de</strong> y azul, respectivamente,<strong>de</strong> rgb.(rgb? obj)((draw-viewport ventana) [color])((clear-viewport ventana))((draw-pixel ventana)posicion [color])((clear-pixel ventana)posicion)((draw-line ventana)posicion1 posicion2 [color])((clear-line ventana)posicion1 posicion2)((draw-rectangle ventana)posicion altura anchura [color])((clear-rectangle ventana)posicion altura anchura)((draw-solid-rectangle ventana)posicion altura anchura [color])((clear-solid-rectangle ventana)posicion altura anchura)Devuelve #t si obj es un objeto <strong>de</strong> tipo rgb; encaso contrario <strong>de</strong>vuelve #f.Dada una ventana <strong>de</strong>vuelve un procedimientoque colorea (resp. borra) el contenidocompleto <strong>de</strong> la misma utilizando coloro negro, si se omite éste.Dada una ventana <strong>de</strong>vuelve un procedimientoque dibuja (resp. borra) un pixel en la misma,en la posicion especicada utilizando color; onegro, si se omite éste.Dada una ventana <strong>de</strong>vuelve un procedimientoque dibuja (resp. borra) una línea en la misma,conectando las posiciones especicadas utilizandocolor; o negro, si se omite éste.Dada una ventana <strong>de</strong>vuelve un procedimientoque dibuja (resp. borra) el bor<strong>de</strong><strong>de</strong> un rectángulo en la misma, <strong>de</strong> altura yanchura dadas, siendo el vértice superiorizquierdo el que ocupa la posicion especicada,utilizando color; o negro, si se omiteéste.Como el anterior, pero colorea toda la -gura utilizando color; o negro, si se omiteéste.CcIa

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!