Referencia de Funes

Principal / Computación

Índice

  1. Notación
  2. Booleanos
  3. Igualdad
  4. Símbolos
  5. Números
  6. Caracteres
  7. Secuencias
  8. Hashes
  9. Estructuras de control
  10. Funciones
  11. Entorno e introspección
  12. Manejo de errores
  13. Output
  14. Manejo de archivos
  15. Finalización
Arriba

Notación

Arriba

Listas de argumentos

Los argumentos opcionales se encierran entre corchetes [].

Los argumentos "rest" se ponen después de un punto.

Funciones

constructor : función que crea un objeto.

accessor : función que devuelve un valor.

setter : función que establece un valor.

accessor+setter : función que devuelve un valor y puede establecerlo usando set.

predicado : función que devuelve #t o #f.

coerción : función que transforma un objeto de un tipo en un objeto asociado de otro tipo.


Arriba

Booleanos

Arriba

Valores booleanos son #t y #f, que representan respectivamente los valores canónicos de verdad y falsedad. #f también cumple la función de lista vacía; otra notación para este valor es (). Los valores booleanos se autoevalúan.

(not x), (null x) predicado : devuelve #t si x es #f. Devuelve #f si no. Nota: not y null son equivalentes.

Arriba

Igualdad

Arriba

(eq a b) predicado : devuelve #t si a y b son el mismo objeto (i.e. apuntan al mismo lugar de la memoria) y #f si no. Nota: eq devuelve #t para dos objetos que representen enteros con el mismo valor numérico por cuestiones de eficiencia de implementación. This feature may be relied upon.

Arriba

Símbolos

Arriba

Los símbolos son nombres. Como regla general, dos símbolos con el mismo nombre son eq. Los símbolos se evalúan al valor al que estén bindeados en el entorno corriente.

(gensym) función : devuelve un símbolo para el cual se garantiza que no es eq a ningún otro símbolo.

Arriba

Números

Arriba

Hasta el momento hay sólo soporte (y poco) para enteros. Los números se autoevalúan.

Enteros

Son simples números enteros, opcionalmente precedidos por un menos para indicar signo.

(+ . numeros) función : devuelve la suma de los números. Si no se pasan argumentos, devuelve 0 (elemento neutro).

(- . numeros) función : si se pasa un solo argumento, devuelve menos el argumento. Si se pasan más argumentos, se devuelve el primero menos los restantes. Si no se pasan argumentos, devuelve 0.

(* . numeros) función : devuelve el producto de los números. Si no se pasan argumentos, devuelve 1.

(< . numeros) predicado : devuelve #t si los números están en relación de orden "<" entre sí. Si no se pasan argumentos, devuelve #t. En todo otro caso, devuelve #f.

(> . numeros) predicado : devuelve #t si los números están en relación de orden ">" entre sí. Si no se pasan argumentos, devuelve #t. En todo otro caso, devuelve #f.

Arriba

Caracteres

Arriba

Representan un valor entre 0 y 255. Se notan como un caracter precedido de una barra. Por ejemplo \a representa al caracter `a' que es el valor 97.

(chr entero) coerción : si el entero está entre 0 y 255, devuelve el caracter asociado.

(ord caracter) coerción : devuelve el valor entero asociado al valor del caracter caracter.

Arriba

Secuencias

Arriba

Se consideran secuencias a las listas y vectores, dentro de los cuales se encuentran las cadenas.

Listas

Un cons es un par de dos objetos cualesquiera, el primero de los cuales se denomina car y el segundo cdr. Una lista es un cons cuyo car es un objeto (el primer elemento de la lista) y su cdr es o bien otra lista o bien la lista vacía (la lista vacía se nota () o #f). Las listas se evalúan al resultado de aplicar su car a su cdr.

(cons a b) constructor : crea un cons con car a y cdr b.

(consp x) predicado : devuelve #t si x es un cons y #f si no.

(car c) accessor+setter : devuelve el car de c.

(cdr c) accessor+setter : devuelve el cdr de c.

(list . args) constructor : crea una lista con los elementos dados en args.

(list* . args) constructor : crea una lista con los elementos dados en args, pero el último cons de la lista contiene al último elemento de args como cdr.

(nth lista n) accessor+setter : devuelve el n-ésimo elemento de la lista lista.

(ntl lista n) accessor+setter : devuelve el n-ésimo cdr de la lista lista.

(last lista) accessor : devuelve el último cons de la lista lista.

(member elemento lista [predicado]) función : devuelve el primer cons de la lista lista cuyo car sea igual a elemento. Si no se especifica un predicado, la función de comparación es eq. Si se especifica, se utiliza dicha función.

(assoc elemento lista [predicado]) función : devuelve el primer elemento de la lista lista que satisfaga que es un cons y su car es igual a elemento. Si no se especifica un predicado, la función de comparación es eq. Si se especifica, se utiliza dicha función.

(range [inicial] final [step]) constructor : crea una lista de enteros comenzada en el número inicial, hasta el número final (no inclusive), incrementando por el valor de step. Si no se especifica un número inicial, por defecto es 0. Si no se especifica un step, por defecto es 1. Nota: el step puede ser negativo, lo cual tiene sentido sólo si el valor final es menor que el valor inicial.

(iota n [inicial step]) constructor : crea una lista de n enteros comenzada en el número inicial, incrementando por el valor de step. Si no se especifica un número inicial, por defecto es 0. Si no se especifica un step, por defecto es 1.

Vectores

Se consideran vectores a secuencias de longitud fija ya sea con elementos de cualquier tipo, o con elementos de un tipo uniforme. Entre los vectores de tipo uniforme hasta el momento hay soporte para cadenas, que contienen únicamente caracteres. Los vectores se autoevalúan.

(vref vec n) accessor+setter : devuelve el n-ésimo elemento del vector vec.

Vectores no uniformes

(vec . args) constructor : crea un vector con los elementos dados en args.

(mkvec n [elemento-inicial]) constructor : crea un vector de longitud n conteniendo el elemento-inicial en todos sus elementos. Si no se especifica un elemento-inicial, éste es por defecto #f.

Cadenas

(str . args) coerción : devuelve una cadena que contiene la representación impresa de sus argumentos. (Si se da más de un argumento, las representaciones se concatenan).

(num->str número [base] [plus] [space] [special] [large]) coerción : devuelve una cadena que contiene la representación impresa del número número en la base dada. La base debe ser un entero entre 2 y 36; su valor por defecto es 10. Los valores de plus, space, special y large son #f por defecto. Si plus es verdadero, se precede el número por un + si es positivo. Si space es verdadero, se precede el número por un espacio si es positivo. Si special es verdadero, se antecede al número por un especificador de base (nada si es decimal, "#x" si es hexadecimal, "#o" si es octal, "#b" si es binario y "#<número>" si es otra base). Si large es verdadero, toda letra que apareciere en la representación escrita del número se escribe en mayúsculas.

(fmt cadena-de-formato . args) función : devuelve la cadena cadena-de-formato reemplazando las combinaciones especiales por su valor asociado. Siendo v el valor de los sucesivos argumentos dados en args, las combinaciones especiales son "%%" con valor asociado "%", "%s" cuyo valor asociado es la representación impresa de v, "%S" cuyo valor asociado es la representación de v, "%i" cuyo valor es la representación del entero v en base decimal, "%b" en binario, "%o" en octal, "%x" en hexadecimal. Además, entre "%" y el caracter de control se pueden insertar caracteres flags: "#" indica que la representación del número lleva la flag special, "+" indica que lleva la flag plus, " " indica que lleva la flag space. Además, si el caracter de control numérico está en mayúsculas, la representación del número lleva la flag large.

Funciones genéricas de tratamiento de secuencias

Estas funciones actúan sobre toda clase de secuencia, incluyendo listas, vectores y cadenas.

(cat . seqs) función : devuelve el resultado de concatenar las secuencias dadas en seqs, que deberían ser del mismo tipo.

(len seq) función : devuelve la longitud de la secuencia seq.

(xrev seq) función : devuelve el resultado de invertir la secuencia seq. Esta función puede alterar el contenido de la secuencia original.

(copy seq) función : devuelve una copia de la secuencia seq.

(elt n seq) accessor+setter : devuelve el n-ésimo elemento de la secuencia seq. Además, si seq es un hash, devuelve el elemento de seq con clave n.

(index elt seq [predicado]) función : devuelve el primer índice para el cual el elemento elt aparece en la secuencia seq. Si no se especifica un predicado, la función de comparación es eq. Si se especifica, se utiliza dicha función.

(map función seq) función : devuelve una lista que contiene el resultado de aplicar la función función a cada elemento de la secuencia seq.

(mapc función seq) función : aplica la función función a cada elemento de la secuencia seq; devuelve seq. Nota: la función es idéntica a map salvo por su resultado; mapc se utiliza cuando no interesa la lista resultante sino los efectos de aplicar la función; por eficiencia.

(maplist función seq) función : si seq es una lista, devuelve una lista que contiene el resultado de aplicar la función función a los sucesivos cdrs de seq. Si seq es otra secuencia, maplist se comporta de forma idéntica a map.

(mapl función seq) función : Tiene los mismos efectos que maplist, pero en lugar de devolver la lista resultante, devuelve seq. La relación mapl / maplist es análoga a la de mapc / map.

Arriba

Hashes (arrays asociativos)

Arriba

Los hashes son vectores utilizados como mappings de claves a valores. Se autoevalúan.

(db . args) constructor : crea un hash de 211 compartimentos tomando alternadamente de args las claves y valores del hash.

(mkdic [n]) constructor : crea un hash de n compartimentos.

(get hash clave) accessor+setter : devuelve el valor del hash hash asociado a la clave por igualdad de punteros (eq).

(hget hash clave) accessor+setter : devuelve el valor del hash hash asociado a la clave por igualdad de cadenas. Se espera que todas las claves del hash sean cadenas.

(fget eqfun hashfun hget clave) accessor+setter : devuelve el valor del hash hash asociado a la clave. Se accede al hash con el predicado de igualdad eqfun que debe recibir dos argumentos y la función hashfun que toma un elemento y un entero n, y devuelve un valor entero entre 0 y n que corresponde al hash del elemento.

Arriba

Estructuras de control

Arriba

(if . cuerpo) forma especial : evalúa condicionalmente el cuerpo. El cuerpo está dado en la forma: condición-1 valor-1 ... condición-n valor-n [cláusula else]. Evalúa las condiciones y devuelve el primer valor para el cual la condición sea verdadera. Si ninguna condición es verdadera y hay cláusula else, devuelve su valor.

Arriba

Looping constructs

Arriba

(while condición . cuerpo) forma especial : evalúa el cuerpo mientras la condición evalúe a un valor verdadero.

(each identificador seq . cuerpo) macro : bindea el identificador a los sucesivos elementos de seq y para cada instancia evalúa el cuerpo. Ej. (each x '(a b c) (pr x))

(to identificador rango . cuerpo) macro : bindea el identificador a los enteros en el rango dado en la forma ([inicial] final [step]) y para cada instancia evalúa el cuerpo. Ej. (to i (1 10) (pr i))

Arriba

Funciones

Arriba

Son funciones todos aquellos objetos destinados a ser llamados con argumentos.

(fun lista-args . cuerpo) forma especial : devuelve una función que toma los argumentos como estén especificados en lista-args. Devuelve el valor de evaluar el cuerpo en un nuevo entorno en el cual los identificadores de lista-args están bindeados a los valores pasados en la llamada. Las funciones creadas con fun tienen scope léxico (es decir, las variables libres en cuerpo se refieren al entorno en el que la función fue definida).

(dyn lista-args . cuerpo) forma especial : devuelve una función dinámica. Es similar a fun, pero las funciones devueltas por dyn tienen scope dinámico (las variables libres en cuerpo se refieren al entorno en el que la función es llamada).

(defun nombre lista-args . cuerpo) macro : equivalente a (def nombre (fun lista-args . cuerpo))

(defdyn nombre lista-args . cuerpo) macro : equivalente a (def nombre (dyn lista-args . cuerpo))

(macro nombre lista-args . cuerpo) macro : crea una fun con argumentos lista-args y cuerpo cuerpo que será expandida durante la compilación. Se espera que los macros no reciban ni devuelvan valores sino expresiones (aunque técnicamente las expresiones son valores).

Arriba

Entorno e introspección

Arriba

Entorno

(env) función : devuelve el entorno actual.

Read / eval

(read [puerto]) función : lee una s-expression del puerto puerto. Si no se especifica un puerto, por defecto es *stdin*.

(stread cadena) función : lee una s-expression de la cadena cadena.

(eval expresión) función : devuelve el resultado de evaluar la expresión.

Arriba

Manejo de errores

Arriba

(err excepción [valor]) función : lanza la excepción excepción, que puede ser cualquier objeto, pero por convención es un símbolo comenzado por ampersand (&); con el valor asociado. Si no se especifica un valor, por defecto es el objeto #<undef>.

(handle excepciones handler thunk) función : llama a la función thunk, que no debe tomar argumentos. Si durante la ejecución de thunk se produce una excepción, handle trata de atraparla y llama a la funcion handler con dos argumentos: la excepción atrapada, y el valor asociado a esa excepción. Si excepciones es #t, handle atrapa todas las excepciones. Si excepciones evalúa a un átomo, handle atrapa las excepciones iguales (eq) a ese objeto. Si excepciones evalúa a una lista, handle atrapa sólo las excepciones contenidas en esa lista (comparadas con eq).

(catch excepciones . cuerpo) macro : evalúa el cuerpo. Si no se producen excepciones, se devuelve el valor de cuerpo. Si durante su evaluación se produce una excepción contemplada en excepciones, se devuelve el valor lanzado junto con la excepción. Si se produce una excepción no contemplada, ésta y su valor asociado se vuelven a lanzar.

(try expresión . try-case) macro : evalúa la expresión. Si no se producen excepciones, se devuelve el valor de expresión. Si durante su evaluación se produce una excepción se la compara con las cláusulas de try-case dadas en la forma: excepciones-1 valor-1 ... excepciones-n valor-n [cláusula-else]. try devuelve el primer valor-i para el cual la excepción esté contemplada en excepciones-i. Si excepción no está contemplada en ningúna cláusula excepciones-i

Arriba

Output

Arriba

(pr objeto [puerto]) función : imprime la representación impresa del objeto en el puerto, seguido de un linefeed. Por defecto el valor del puerto es *stdout*.

(pr1 objeto [puerto]) función : imprime la representación impresa del objeto en el puerto. Por defecto el valor del puerto es *stdout*.

(wr objeto [puerto]) función : imprime la representación del objeto en el puerto, seguido de un linefeed. Por defecto el valor del puerto es *stdout*.

(wr1 objeto [puerto]) función : imprime la representación del objeto en el puerto. Por defecto el valor del puerto es *stdout*.

(out puerto objeto) función : imprime la representación impresa del objeto en el puerto.

(cr [puerto]) función : imprime un carriage return en el puerto. Por defecto el valor del puerto es *stdout*.

(lf [puerto]) función : imprime un linefeed en el puerto. Por defecto el valor del puerto es *stdout*.

(crlf [puerto]) función : imprime carriage return seguido de linefeed en el puerto. Por defecto el valor del puerto es *stdout*.

(prf formato . args) macro : equivalente a (pr1 (fmt formato . args)).

(wrf formato . args) macro : equivalente a (wr1 (fmt formato . args)).

(outf puerto formato . args) macro : equivalente a (out puerto (fmt formato . args)).

Arriba

Manejo de archivos

Arriba

(load nombre-archivo) función : lee del archivo nombre-archivo y evalúa todas sus expresiones en el entorno corriente. Devuelve el último valor evaluado.

(import nombre-archivo) función : lee del archivo nombre-archivo y evalúa todas sus expresiones en un nuevo entorno. Devuelve dicho entorno.

(run nombre-archivo) función : lee del archivo nombre-archivo y evalúa todas sus expresiones en un nuevo entorno. Devuelve el último valor evaluado.

(use símbolo) macro : equivalente a (def símbolo (import archivo)) siendo archivo la cadena del nombre del símbolo concatenada con la extensión ".fu".

(fread nombre-archivo) función : lee del archivo nombre-archivo y devuelve una lista de todas sus expresiones (no evaluadas).

Arriba

Finalización

Arriba

(exit [entero]) función : termina la ejecución del programa devolviendo el valor del entero. Por defecto, el entero es 0.

(die [mensaje entero]) función : termina la ejecución del programa imprimiendo el mensaje y devolviendo el valor del entero. Por defecto, el entero es 1.

Arriba