Consultar ensayos de calidad


Comandos scheme - Manual de referencia de Scheme



Manual de referencia de Scheme

1

El lenguaje de programación Scheme

En cualquier lenguaje tenemos palabras que se combinan siguiendo ciertas reglas para
formar frases con signicado. A su vez, estas palabras se forman uniendo las letras de
un abecedario. Scheme, como lenguaje de programación, utiliza de manera analoga a las
palabras los denominados símbolos y éstos se forman uniendo las letras del alfabeto (sin
distinguir mayúsculas de minúsculas), los dígitos del 0 al 9 y cualquier otro caracter que
aparezca en el teclado salvo:
( ) [ ] ; , '' ` #
ya que tienen un signicado especial, similar al que tienen los signos de puntuación.
Los caracteres

+ - .
también son especiales y no deben aparecer en primer lugar en un símbolo. Los números


no se consideran símbolos en Scheme.
Un símbolo que es usado para representar un valor se denomina variable. El intérprete
determinara el signicado de cada variable; los números tienen su valor usual.

Siguiendo la analogía con los lenguajes el equivalente en Scheme a las frases son las
expresiones, que pueden consistir en un símbolo, un número o una lista, es decir, un
paréntesis izquierdo, seguido de expresiones separadas por espacios en blanco, y para
terminar un paréntesis derecho. La primera de dichas expresiones debe evaluar a un
procedimiento, evaluandose las restantes como los argumentos del mismo.
Notación

En lo que sigue utilizaremos la siguiente notación al escribir las expresiones
(procedimiento expresion 1 . . . expresion k )
es decir, el nombre del procedimiento aparecera en negrita y los argumentosen italica.
Ademas tendremos en cuenta que si el nombre de un argumento es el nombre de un
tipo (ver el apartado PREDICADOS DE TIPO), entonces el argumento debe ser del tipo
nombrado . Usaremos el siguiente convenio:

z
x
n
k

número complejo
número real
número entero
número natural
obj, expresion, ex
expresiones

l
lista
cter caracter
cad cadena
proc procedimiento
de cualquier tipo
sucesión de expresiones

Utilizaremos los corchetes para denotar expresiones opcionales y los puntos suspensivos
para denotar varias ocurrencias.

(procedimiento obj1 . . . objk ) Indica que procedimiento es de aridad variable
(procedimiento obj1 [obj 2 ])

Indica que procedimiento tiene dos argumentos y
el segundo es opcional

A continuación enumeraremos las expresiones mas usuales seguidas de su valor.

CcIa


Manual de referencia de Scheme

2

Predicados de tipo

(symbol? obj )

Si obj es de tipo símbolo entonces #t; e.o.c. #f.

(procedure? obj )

Si obj es de tipo procedimiento entonces #t; e.o.c. #f.

(number? obj )

Si obj es de tipo número entonces #t; e.o.c. #f.

(pair? obj )

Si obj es de 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 de los valores de verdad (o booleanos), #t
o #f, entonces #t; e.o.c. #f.


(vector? obj )

Si obj es de tipo vector entonces #t; e.o.c. #f.

(char? obj )

Si obj es de tipo caracter entonces #t; e.o.c. #f.

(string? obj )

Si obj es de tipo cadena entonces #t; e.o.c. #f.Ningún objeto verica mas de uno de los predicados anteriores; otro predicado útil es

(list? obj )

Si obj es de tipo lista entonces #t; e.o.c. #f.

Predicados de igualdad

(= z1 [z2 . . . zk ])

Igualdad numérica entre los argumentos.

(eq? obj1 obj 2 )

Igualdad simbólica.

(eqv? obj1 obj 2 )

Igualdad numérico-simbólica.

(equal? obj1 obj 2 )

Igualdad de valores.

Variables y literales

expresion

Valor de expresion.


(define simbolo obj )

Le asigna a simbolo el valor de obj.

(quote obj ) ≡ 'obj

obj.


Los números, caracteres, cadenas y valores de verdad (o booleanos), evalúan a si mismos
por lo que no necesitan quote.

(let
([(simbolo1 obj1 )
.
.
.
(simbolok objk )])
ex 1 [ex2 . . . ex r ])

(Todos los simbolo i deben ser distintos). Evalúa
cada obj j , en un entorno local, asigna a cada
simbolo s el valor de obj s y a continuación evalúa
de forma consecutiva ex1 . . . ex r , devolviendo el
valor de la última.

CcIa


Manual de referencia de Scheme

(let*
([(simbolo1 obj1 )
.
.
.
(simbolok objk )])
ex 1 [ex2 . . . ex r ])

3
En un entorno local, asigna, de manera secuencial, a cada simbolo s el valor de obj s y a continuación evalúa de forma consecutiva ex1 . . . ex r ,
devolviendo el valor de la última.

(letrec variables cuerpo )

Similar a let, pero permite hacer deniciones
de procedimientos recursivos.


(set! simbolo expresion )

Asigna el valor de expresion a simbolo, que ya
debe tener asignado algún valor.
Devuelve un
valor no especíco.

Expresiones lambda

(lambda argumentos cuerpo )argumentos puede ser:
(simbolo1 . . . simbolo k )

Devuelve un procedimiento.
Lista de símbolos (todos distintos) que representan
a cada argumento de la función, la cual sera, por
tanto, de aridad la longitud de dicha lista.


variable

Símbolo que representa a una lista con los argumentos. Por tanto sera de aridad variable.

(simb1 . . . simbk . variable )

Los primeros k argumentos se guardan en las variables simb1 a simbk . El resto de argumentos se
guardan en una lista en variable.
El procedimiento
es, por tanto, de aridad al menos k .

cuerpo : Sucesión de expresiones que describen la función.

(define (simb simb1 . . . simbk ) Equivalente a
cuerpo )
(define simb
(lambda (simb1 . . . simbk )
cuerpo ))
(define (simbolo . variable )
cuerpo )

Equivalente a
(define simbolo
(lambda variable
cuerpo ))

(define (simb s1 . . . sk . var )
cuerpo )

Equivalente a
(define simb

(lambda (s1 . . . sk . var )
cuerpo ))

Abstracción de procedimientos

(apply proc ex 1 [ex2 . . . exk ])

(ex k una lista), aplica proc con argumentos ex1
. . . ex k−1 y los elementos de ex k .

CcIa


Manual de referencia de Scheme

4

(map proc l 1 [l2 . . . l k ])

Aplica proc a cada elemento de l 1 ; si existe mas
de una lista, todas han de tener la misma longitud y aplica proc tomando como argumentos
un elemento de cada lista, devuelve la lista de
los resultados.

(for-each proc l 1 [l2 . . . l k ])

Aplica proc a cada elemento de l si existe mas
de una lista, todas han de tener la misma longitud y aplica proc tomando como argumentos
un elementode cada lista, devuelve un valor no
especíco.

Procedimientos numéricos

(+ [z1 . . . zk ])

Suma de los argumentos; sin argumentos, 0.

(- z1 [z2 . . . zk ])

Resta de los argumentos, asociando por la izquierda
con un solo argumento, −z1 .

(* [z1 . . . zk ])

Producto de los argumentos; sin argumentos, 1.

(/ z1 [z2 . . . zk ])

División de los argumentos asociando por la izquierda; con un solo argumento, 1/z .

(sqrt z )

Raíz cuadrada principal de z (si z es real, la raíz cuadrada positiva).

(abs x )

Valor absoluto de x.

(sin z )

Seno de z.

(cos z )

Coseno de z.

(tan z )

Tangente de z.

(asin z )

Arcoseno de z.

(acos z )

Arcocoseno de z.

(atan z )

Arcotangente de z.

(max x1 [x2 . . . xk ])

Maximo entre los argumentos.

(min x1 [x2 . . . xk ])

Mínimo entre los argumentos.

(quotient n1 n2 )

(n2 distinto de cero), cociente de n1 entre n2 .

(remainder n1 n2 )

(n2 distinto de cero), resto de n1 entre n2 .

(expt z1 z2 )

La potencia z1 z2 (con 00 = 1).

(exp z )

La potencia ez .

(log z )

Logaritmo en base e de z.

(gcd [n1 . . . nk ])

Maximo común divisor entre los argumentos; sin argumentos, 0.

CcIa


Manual de referencia de Scheme

5

(lcm [n1 . . . nk ])

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 de x.

(round x )

Entero mas cercano a x, en caso de equidistancia número entero par mas cercano.

(exact->inexactz )

El número inexacto numéricamente mas cercano a z.

(inexact->exact z )

El número exacto numéricamente mas cercano a z.

Predicados numéricos

(complex? obj )

Si obj es un número complejo entonces #t; e.o.c. #f.

(real? obj )

Si obj es un número real entonces #t; e.o.c. #f.

(rational? obj )

Si obj es un número racional entonces #t; e.o.c. #f.

(exact? z )

Si z es exacto, entonces #t; e.o.c #f.

(inexact? z )

Si z es inexacto, entonces #t; e.o.c #f.

(integer? obj )

Si obj es un número entero entonces #t; e.o.c. #f.

(even? n )

Si n es par entonces #t; e.o.c. #f.

(odd? n )

Si n es impar entonces #t; e.o.c. #f.

(zero? z )

Si z es el cero entonces #t; e.o.c. #f.

(positive? x )

Si x es mayor estricto que cero entonces #t; e.o.c. #f.

(negative? x )

Si x es menor estricto que cero entonces #t; e.o.c. #f.

Relaciones numéricas

(> x1 [x2 . . . xk ])

Los argumentos estan en orden decreciente.

(< x1 [x2 . . . xk ])

Los argumentos estan en orden creciente.

(>= x1 [x2 . . . xk ])

Los argumentos estan en orden no creciente.

(list vector )

Lista con los elementos de vector.

(list->vector lista )

Vector con los elementos de lista.

(vector-set! vector k obj )

Almacena obj en el k -ésimo elemento de vector
devuelve un valor no especíco.

(vector-fill! vector obj )

Cambia cada elemento de vector por obj. Devuelve
un valor no especíco.

Procedimientos sobre caracteres

(char->integer caracter )

Código ASCII de caracter.

(integer->char n )

Caracter con código ASCII n.

(char


Política de privacidad