Procedimientos predefinidos

Procedimientos predefinidos


Matemáticos
acos(a)
asin(a)
atan(a)
atan2(y, x)
ceil(a)
cos(a)
exp(a)
floor(a)
frandom()
log(a)
pow(a, b)
random(n)
round(a)
sin(a)
sqrt(a)
tan(a)
Manejo de strings
atof(s)
atoi(s)
appendChar(s, n)
charAt(s, n)
length(s)
Control del IAVC (Integrated Audio and Video Controller)
arrayPoke(addr, data, offset, count)
clear()
isButtonDown(buttons, mask)
memCardLoad()
memCardSave(data)
note(nt)
peek(addr)
poke(addr, b)
pokew(addr, w)
putAt(tileIndex, x, y)
putSpriteAt(spriteIndex, x, y)
readCtrlOne()
readCtrlTwo()
setBackground(red, green, blue)
setForeground(red, green, blue)
setLargeSpriteImage(spriteIndex, imageIndex)
setLargeSpritePixels(imageIndex, pixels)
setScreenOffset(x, y)
setSmallSpriteImage(spriteIndex, imageIndex)
setSmallSpritePixels(imageIndex, pixels)
setSmoothScroll(x, y)
setSoundAttack(channel, time)
setSoundDecay(channel, time)
setSoundFrequency(channel, frequency)
setSoundRelease(channel, time)
setSoundSustain(channel, sustain)
setSoundVolume(channel, volume)
setSoundWave(channel, waveform)
setSpriteColor(index, red, green, blue)
setTileColor(index, red, green, blue)
setTilePixels(index, pixels)
showAt(msg, x, y)
soundOff(channel)
soundOn(channel)
Archivos
readFile(filename)
readSpritesFile(filename)
readTilesFile(filename)
source(filename)
source(filename, env)
Arreglos
arrayCopy(src, srcOffset, dst, dstOffset,
count)
length(arr)
range(lower, upper)
Ambientes
getNames(env)
getValues(env)
hasName(name)
hasName(name, env)
removeName(name)
removeName(name, env)
Tipos
isArray(obj)
isBoolean(obj)
isCollection(obj)
isNumber(obj)
isProcedure(obj)
isQueue(obj)
isSet(obj)
isStack(obj)
isString(obj)
Estructuras de datos
Queue()
Set()
Stack()
append(a, b)
chooseOne(data)
contains(data, element)
max(data)
min(data)
prod(data)
size(data)
sort(data)
sum(data)
toArray(data)
toQueue(data)
toSet(data)
toStack(data)
Con procedimientos como argumentos
apply(proc, arr)
filter(pred, data)
map(func, data)
mappend(func, data)
reduce(binOp, data, firstValue)
reducef(binOp, data)
sortQueue(q, comp)
sortc(data, comp)
Otros
error(msg)
pause(time)
print(obj)

Aquí hay una breve descripción de cada uno de los
procedimientos predefinidos. Para cada uno de ellos se explica qué
hace, qué argumentos espera y, en caso de ser una función,
qué resultado devuelve. En el caso de procedimientos que esperen como
argumento un número entero es posible pasarles un flotante y el
procedimiento automáticamente toma únicamente la parte entera
de ese número. Para los procedimientos en donde se espera como
argumento un número flotante y se le pasa un entero el procedimiento
simplemente lo interpreta como el valor flotante correspondiente. En
cualquier otro caso es un error pasar un argumento de un tipo que no
corresponde al esperado por el procedimiento.

Matemáticos

Los procedimientos matemáticos proporcionan las funciones
matemáticas básicas y la generación de números
aleatorios.

acos(a)

Función que devuelve el arco coseno de un ángulo, en
radianes, en el rango de 0.0 a PI.

Argumentos:

  1. a - flotante: El valor del cual se quiere
    obtener el arco coseno.

Devuelve:

Un flotante con arco coseno del argumento.

asin(a)

Función que devuelve el arco seno de un ángulo, en
radianes, en el rango de -PI/2 a PI/2.

Argumentos:

  1. a - flotante: El valor del cual se quiere
    obtener el arco seno.

Devuelve:

Un flotante con el arco seno del argumento.

atan(a)

Función que devuelve el arco tangente de un ángulo,
en radianes, en el rango de -PI/2 a PI/2.

Argumentos:

  1. a - flotante: El valor del cual se quiere
    obtener al arco tangente.

Devuelve:

Un flotante con el arco tangente del argumento.

atan2(y, x)

Función que convierte de coordenadas rectangulares (x, y) a
polares (r, theta). Esta función calcula el ángulo theta
evaluando el arco tangente de y/x, en radianes, en el rango de -PI a
PI.

Argumentos:

  1. y - flotante: Ordenada de las
    coordenadas.

  2. x - flotante: Abscisa de las
    coordenadas.

Devuelve:

Un flotante con el componente theta del punto (r, theta) en
coordenadas polares que corresponde al punto (x, y) en coordenadas
polares.

ceil(a)

Función que devuelve el flotante más pequeño
(más cercano al infinito negativo) que no es menor que el
argumento y es igual a un entero matemático.

Argumentos:

  1. a - flotante: Un valor.

Devuelve:

El más pequeño flotante (más cercano al
infinito negativo) que no es menor que el valor y es igual a un
entero matemático.

cos(a)

Función que devuelve el coseno de un ángulo.

Argumentos:

  1. a - flotante: El ángulo en
    radianes.

Devuelve:

Un flotante con el coseno del ángulo.

exp(a)

Función que devuelve e (el
número de Euler) elevado a una potencia.

Argumentos:

  1. a - flotante: El exponente al que hay que
    elevar e.

Devuelve:

Un flotante con el valor de
ea, donde
e es la base de los logaritmos
naturales.

floor(a)

Función que devuelve el flotante más grande
(más cercano al infinito positivo) que no es mayor que el
argumento y es igual a un entero matemático.

Argumentos:

  1. a - flotante: Un valor.

Devuelve:

El más grande flotante (más cercano al
infinito positivo) que no es mayor que el argumento y es igual a un
entero matemático.

frandom()

Función que devuelve un número aleatorio con
distribución uniforme entre 0.0 y 1.0.

Devuelve:

Un flotante aleatorio entre 0.0 y 1.0.

log(a)

Función que devuelve el logaritmo (base
e) de un valor.

Argumentos:

  1. a - flotante: Un número mayor que
    0.0.

Devuelve:

Un flotante con el logaritmo natural de
a.

pow(a, b)

Función que devuelve el valor del primer argumento elevado
a la potencia del segundo argumento.

Argumentos:

  1. a - flotante: La base.

  2. b - flotante: El exponente.

Devuelve:

Un flotante con el valor
ab.

random(n)

Función que devuelve un número entero aleatorio, con
distribución uniforme, entre 0 y n-1.

Argumentos:

  1. n - entero: Un número entero mayor
    que 0.

Devuelve:

Un entero aleatorio, con distribución uniforme, entre
0 y n-1.

round(a)

Función que devuelve el entero más cercano al
argumento. Se calcula sumándole 1/2 al argumento y obteniendo el
piso (floor) del resultado.

Argumentos:

  1. a - flotante: El valor a
    redondear.

Devuelve:

El flotante con el valor del argumento redondeado al entero
más cercano.

sin(a)

Función que devuelve el seno de un ángulo.

Argumentos:

  1. a - flotante: El ángulo en
    radianes.

Devuelve:

Un flotante con el seno del ángulo.

sqrt(a)

Función que devuelve la raíz cuadrada positiva de un
valor.

Argumentos:

  1. a - flotante: Un valor positivo.

Devuelve:

Un flotante con la raíz cuadrada positiva del
valor.

tan(a)

Función que devuelve la tangente de un
ángulo.

Argumentos:

  1. a - flotante: El ángulo en
    radianes.

Devuelve:

Un flotante con la tangente del ángulo.

Manejo de strings

Procedimientos y funciones para manipular strings.

atof(s)

Función que traduce la representación de un
número como un string en un valor flotante. Es un error si el
string no contiene la representación de un número
flotante.

Argumentos:

  1. s - string: El string que representa un
    número flotante.

Devuelve:

El número flotante representado por el
string.

atoi(s)

Función que traduce la representación de un
número como un string en un valor entero. Es un error si el
string no contiene la representación de un número
entero.

Argumentos:

  1. s - string: El string que representa un
    número entero.

Devuelve:

El número entero representado por el string.

appendChar(s, n)

Función que concatena un caracter unicode al final de un
string.

Argumentos:

  1. s - string: Un string.

  2. n - entero: El valor Unicode del
    caracter.

Devuelve:

Un nuevo string que corresponde al string pasado como primer
argumento con el caracter Unicode que corresponde al segundo
argumento concatenado al final.

charAt(s, n)

Función que devuelve el código Unicode del caracter
que se encuentra en una posición de un string.

Argumentos:

  1. s - string: El string del cual se desea
    extraer un caracter.

  2. n - entero: La posición del
    caracter dentro del string. Si el string es de longitud L entonces
    debe ser un número entre 0 y L-1.

Devuelve:

Un entero con el código Unicode del caracter en esa
posición del string.

length(s)

Función que devuelve la longitud (número de
caracteres) de un string.

Argumentos:

  1. s - string: Un string.

Devuelve:

Un entero con la longitud del string.

Control del IAVC (Integrated Audio and Video Controller)

El IAVC es el chip (simulado en software) que se encarga de manejar
el audio, video, controles y tarjeta de memoria en
simpleJ™. Estos son los procedimientos que
permiten controlar el IAVC.

Los programas controlan el IAVC por medio de 32768 direcciones de
memoria de 8 bits (un byte) cada una. Algunas de estas direcciones
corresponden a las memorias en donde el IAVC almacena la imágenes
de los tiles, los sprites, los tiles de la pantalla y las formas de onda
para los canales de audio. Las otras direcciones son para accesar los
registros de control del IAVC. Los procedimientos
poke, pokew,
arrayPoke y la función
peek son los que permiten accesar directamente
estas direcciones de memoria. Los demás procedimientos y funciones
ofrecen una manera más sencilla de manipular el IAVC, sin que sea
necesario conocer todos los detalles de estas direcciones de
memoria.

arrayPoke(addr, data, offset, count)

Procedimiento que copia información de un arreglo de
enteros a grupo de direcciones consecutivas de memoria del IAVC.

Argumentos:

  1. addr - entero: La dirección
    inicial de memoria a donde se deben copiar los datos.

  2. data - arreglo de enteros: De donde se
    deben copiar los datos. Debe contener números entre 0 y
    255, para números fuera de este rango únicamente se
    toma el byte menos significativo y se descarta el resto.

  3. offset - entero: El subíndice del
    arreglo donde se encuentra el primer dato que se debe copiar al
    IAVC.

  4. count - entero: Cuántos elementos
    del arreglo se deben copiar al IAVC.

clear()

Procedimiento que borra la pantalla. En realidad rellena los 24
renglones de 32 tiles cada uno que se encuentran en la parte superior
izquierda del área de memoria de video del IAVC con el tile
número 32 (cuya imagen, si no se ha redefinido, es un espacio en
blanco). Para mayor información, ver la documentación del
procedimiento setScreenOffset.

isButtonDown(buttons, mask)

Función que permite detectar si un botón se
encuentra presionado aún cuando el jugador presione varios
botones del control simultáneamente.

Ejemplo de uso:

final BOTON_ARRIBA 1
var botones = readCtrlOne();
if (isButtonDown(botones, BOTON_ARRIBA)) {

Argumentos:

  1. buttons - entero: Un número con un
    bit prendido por cada botón que se encuentre apoyado en el
    control. Típicamente es el resultado de llamar la
    función readCtrlOne o la
    función readCtrlTwo.

  2. mask - entero: La máscara que
    indica cuáles botones se desean checar.

Devuelve:

true si el botón (o alguno de
los botones) indicado se encuentra presionado, de lo contrario
devuelve false.

memCardLoad()

Función que devuelve los 512 bytes almacenados en la
tarjeta de memoria para este programa.

Devuelve:

Un arreglo de 512 enteros. Cada uno de estos enteros
está dentro del rango de 0 a 255. Si no hay
información almacenada para este programa en la tarjeta de
memoria entonces devuelve un arreglo con puros ceros.

memCardSave(data)

Procedimiento que almacena datos en el área de la tarjeta
de memoria asignada a este programa.

Argumentos:

  1. data - arreglo de enteros: Un
    arreglo con 512 enteros. Debe contener números entre 0 y
    255, para números fuera de este rango únicamente se
    toma el byte menos significativo y se descarta el resto.

note(nt)

Procedimiento que genera un sonido correspondiente a una nota de
música. Emplea el canal cero de audio para generar este sonido.
Se puede modificar el timbre de este sonido empleando los procedimientos
setSoundAttack,
setSoundDecay. Se puede modificar su volumen
con el procedimiento setSoundVolume.
También es posible emplear los procedimientos
setSoundSustain y
setSoundRelease para modificar su timbre, pero
en este caso es necesario emplear el procedimiento
soundOff para terminar la generación de
la nota.

Argumentos:

  1. note - string: La nota de música
    que se debe generar.

    El string debe contener una letra (mayúscula) y un
    número. La letra le indica cuál es la nota y el
    número le indica cuál es la octava. Entre más
    pequeño sea el número, más baja es la octava
    (sonido más grave); entre más grande, más
    alta es la octava (sonido más agudo). La octava debe ser un
    número entero entre 1 y 6. La siguiente tabla indica la
    correspondencia entre las letras y las notas musicales:


    Table 1. Letras y Notas

    Letra Nota
    C Do
    D Re
    E Mi
    F Fa
    G Sol
    A La
    B Si

    Se puede emplear un "#" o
    una "b" entre la letra de la nota
    y el número de la octava para indicar
    sostenido o bemol
    respectivamente. Es decir que
    "C#4" representa un do
    sostenido
    y "Eb4" es
    un mi bemol.

    La nota más grave es la
    "A1" y la más aguda es la
    "G#6".

peek(addr)

Función para leer una de las direcciones de memoria del
IAVC.

Argumentos:

  1. addr - entero: La dirección de memoria que se debe
    accesar, es un número entre 0 y 32767. Si se encuentra
    fuera de este rango, entonces únicamente se emplean los 15
    bits menos significativos y se descarta el resto.

Devuelve:

Un número entero entre 0 y 255 que corresponde al
dato devuelvedo por el IAVC al accesar esa dirección de
memoria.

poke(addr, b)

Procedimiento que almacena un byte (8 bits) en una de las
direcciones de memoria del IAVC.

Argumentos:

  1. addr - entero: La dirección de
    memoria en la cual se debe almacenar el byte, es un número
    entre 0 y 32767. Si se encuentra fuera de este rango, entonces
    únicamente se emplean los 15 bits menos significativos y se
    descarta el resto.

  2. b - entero: Un número entre 0 y
    255 que se debe almacenar en la dirección de memoria del
    IAVC indicada por addr.

pokew(addr, w)

Procedimiento que almacena un valor de 2 bytes (16 bits) en dos
direcciones consecutivas de la memoria del IAVC.

Argumentos:

  1. addr - entero: La dirección de
    memoria en la cual se debe almacenar el byte más
    significativo de w, el byte menos significativo
    se almacena en la dirección siguiente (addr +
    1
    ), es un número entre 0 y 32767. Si se encuentra
    fuera de este rango, entonces únicamente se emplean los 15
    bits menos significativos y se descarta el resto.

  2. w - entero: Un número entre 0 y
    65535. Dos bytes que se deben almacenar en las direcciones de
    memoria del IAVC addr y addr + 1.

putAt(tileIndex, x, y)

Procedimiento que coloca un tile en el área de memoria de
video del IAVC. Esta área de memoria está organizada en 32
renglones de 64 tiles cada uno, de los cuales únicamente es
visible en la pantalla un área de 24 renglones de 32 tiles cada
uno. Los parámetros x y y de este procedimiento son
independientes del área que esté visible en ese momento en
la pantalla. Para mayor información, ver la documentación
del procedimiento setScreenOffset.

Argumentos:

  1. tileIndex - entero: El tile que se debe
    colocar. Es un número entre 0 y 255.

  2. x - entero: La posición horizontal
    del tile. Es un número entre 0 y 63.

  3. y - entero: La posición vertical
    del tile. Es un número entre 0 y 31.

putSpriteAt(spriteIndex, x, y)

Procedimiento que mueve la posición de un sprite en la
pantalla de manera que su esquina superior izquierda quede en la
posición (x, y).

Argumentos:

  1. spriteIndex - entero: El sprite que se
    debe mover, es un número entre 0 y 31.

  2. x - entero: La coordenada horizontal, en
    pixeles, donde debe quedar la esquina superior izquierda del
    sprite. Es un número entre -16 y 256.

  3. y - entero: La coordenada vertical, en
    pixeles, donde debe quedar la esquina superior derecha del sprite.
    Es un número entre -16 y 192.

readCtrlOne()

Función que devuelve un entero entre 0 y 255 indicando los
botones que están presionados en ese instante en el control
número uno.

A cada bit (botón apoyado) corresponde un valor que es una
potencia de dos. Si dos o más botones están apoyados,
entonces el valor es la suma de los valores que corresponden a cada
botón.


Table 2. Números para cada botón

Valor Botón
1 flecha arriba
2 flecha abajo
4 flecha izquierda
8 flecha derecha
16 enter (o return)
32 control
64 barra espaciadora
128 P

Devuelve:

Un entero entre 0 y 255. Este entero corresponde a un byte
en donde cada uno de sus ocho bits está prendido si el
botón correspondiente está presionado en ese
instante.

readCtrlTwo()

Función que devuelve un entero entre 0 y 255 indicando los
botones que están presionados en ese instante en el control
número dos.

A cada bit (botón apoyado) corresponde un valor que es una
potencia de dos. Si dos o más botones están apoyados,
entonces el valor es la suma de los valores que corresponden a cada
botón.


Table 3. Números para cada botón

Valor Botón
1 R
2 F
4 D
8 G
16 shift
32 Z
64 X
128 Q

Devuelve:

Un entero entre 0 y 255. Este entero corresponde a un byte
en donde cada uno de sus ocho bits está prendido si el
botón correspondiente está presionado en ese
instante.

setBackground(red, green, blue)

Procedimiento para cambiar el color del fondo. En realidad cambia
el registro de color número cero para los tiles y, por lo tanto,
es equivalente a setTileColor(0, red, green, blue). Para
mayor información, ver la documentación del procedimiento
setTileColor.

Argumentos:

  1. red - entero: El componente rojo del
    color. Es un número entre 0 y 31.

  2. green - entero: El componente verde del
    color. Es un número entre 0 y 31.

  3. blue - entero: El componente azul del
    color. Es un número entre 0 y 31.

setForeground(red, green, blue)

Procedimiento para cambiar el color de las letras. En realidad
cambiar el registro de color número uno para los tiles y, por lo
tanto, es equivalente a setTileColor(1, red, green, blue).
Para mayor información, ver la documentación del
procedimiento setTileColor.

Argumentos:

  1. red - entero: El componente rojo del
    color. Es un número entre 0 y 31.

  2. green - entero: El componente verde del
    color. Es un número entre 0 y 31.

  3. blue - entero: El componente azul del
    color. Es un número entre 0 y 31.

setLargeSpriteImage(spriteIndex, imageIndex)

Procedimiento que asigna una de las 128 imágenes grandes
(de 16 por 16 pixeles) a un sprite.

Argumentos:

  1. spriteIndex - entero: Número entre
    0 y 31 para indicar a cuál sprite se le debe asignar la
    imagen.

  2. imageIndex - entero: Número entre
    0 y 127 para indicar cuál de las 128 imágenes
    grandes se le debe asignar al sprite.

setLargeSpritePixels(imageIndex, pixels)

Procedimiento para modificar los pixeles de una imagen grande (16
por 16 pixeles) de sprite en la memoria del IAVC.

Argumentos:

  1. imageIndex - entero: Número entre
    0 y 127 para indicar a cuál de las 128 imágenes
    grandes se le deben redefinir sus pixeles.

  2. pixels - arreglo de enteros: Arreglo con
    256 enteros, cada uno debe ser un valor entre 0 y 15. Los valores
    entre 0 y 14 se emplean para seleccionar el registro de color a
    emplear para ese pixel. Un 15 indica un pixel transparente. Cada
    grupo consecutivo de 16 valores corresponde a un renglón de
    pixeles de la imagen, empezando por el renglón
    superior.

setScreenOffset(x, y)

Procedimiento para indicar el área de la memoria de video
que se debe mostrar en la pantalla. La memoria de video está
organizada en 32 renglones de 64 tiles cada uno, en la pantalla se
muestra una ventana que cubre sólo una parte de la memoria de
video. Esta área es de 24 renglones de 32 tiles cada uno. Con
este procedimiento se puede mover esta ventana para ir mostrando
diferentes partes de la memoria de video, un uso posible es para ir
moviendo el fondo cuando el personaje recorre un mundo más grande
que la pantalla.

Al emplear este procedimiento la imagen del fondo se puede
desplazar únicamente en incrementos de 8 pixeles. Para lograr
movimientos más continuos (de 1 en 1 pixel) es necesario combinar
este procedimiento con el procedimiento
setSmoothScroll.

Argumentos:

  1. x - entero: Un número entre 0 y
    32. Indica cuánto hay que desplazar horizontalmente la
    ventana sobre el área de video. La unidad de desplazamiento
    es un tile.

  2. y - entero: Un número entre 0 y 8.
    Indica cuánto hay que desplazar verticalmente la ventana
    sobre el área de video. La unidad de desplazamiento es un
    tile.

setSmallSpriteImage(spriteIndex, imageIndex)

Procedimiento que asigna una de las 128 imágenes
pequeñas (de 8 por 8 pixeles) a un sprite.

Argumentos:

  1. spriteIndex - entero: Número entre
    0 y 31 para indicar a cuál sprite se le debe asignar la
    imagen.

  2. imageIndex - entero: Número entre
    0 y 127 para indicar cuál de las 128 imágenes
    pequeñas se le debe asignar al sprite.

setSmallSpritePixels(imageIndex, pixels)

Procedimiento para modificar los pixeles de una imagen
pequeña (8 por 8 pixeles) de sprite en la memoria del
IAVC.

Argumentos:

  1. imageIndex - entero: Número entre
    0 y 127 para indicar a cuál de las 128 imágenes
    pequeñas se le deben redefinir sus pixeles.

  2. pixels - arreglo de enteros: Arreglo con
    64 enteros, cada uno debe ser un valor entre 0 y 15. Los valores
    entre 0 y 14 se emplean para seleccionar el registro de color a
    emplear para ese pixel. Un 15 indica un pixel transparente. Cada
    grupo consecutivo de 8 valores corresponde a un renglón de
    pixeles de la imagen, empezando por el renglón
    superior.

setSmoothScroll(x, y)

Procedimiento para desplazar la ventana sobre el área de
video en incrementos de un solo pixel. únicamente puede emplearse
para hacer desplazamientos hasta de 16 pixeles. Para lograr
desplazamientos más grandes hay que combinarlo con el
procedimiento setScreenOffset.

Argumentos:

  1. x - entero: Un número entre 0 y
    15. Indica cuánto hay que desplazar horizontalmente la
    ventana sobre el área de video. La unidad de desplazamiento
    es un pixel.

  2. y - entero: Un número entre 0 y 15.
    Indica cuánto hay que desplazar verticalmente la ventana
    sobre el área de video. La unidad de desplazamiento es un
    pixel.

setSoundAttack(channel, time)

Procedimiento para fijar el tiempo de attack en un canal de audio.
El tiempo de attack es el tiempo que toma un sonido desde que se empieza
a generar hasta que llega a su volumen máximo.

Argumentos:

  1. channel - entero: El canal de audio. Un
    número entre 0 y 3.

  2. time - entero: El tiempo de attack en
    milisegundos. Un número entre 0 y 65535.

setSoundDecay(channel, time)

Procedimiento para fijar el tiempo de decay en un canal de audio.
El tiempo de decay es el tiempo que toma un sonido desde que llega a su
volumen máximo hasta que baja a su volumen de sustain.

Argumentos:

  1. channel - entero: El canal de audio. Un
    número entre 0 y 3.

  2. time - entero: El tiempo de decay en
    milisegundos. Un número entre 0 y 65535.

setSoundFrequency(channel, frequency)

Procedimiento para fijar la frecuencia de un canal de
audio.

Argumentos:

  1. channel - entero: El canal de audio. Un
    número entre 0 y 3.

  2. frequency - entero: La frecuencia. Un
    número entre 0 y 65535. Este número no está
    en Hertz; para pasar de Hertz al valor que hay que pasar como
    parámetro, hay que multiplicar la frecuencia en Hertz por
    23.77723356 y redondear el resultado.

setSoundRelease(channel, time)

Procedimiento para fijar el tiempo de release de un canal de
audio. El tiempo de release es el tiempo que toma un sonido desde que se
ordena detener la generación del sonido por medio del
procedimiento soundOff hasta que su volumen
llega a cero.

Argumentos:

  1. channel - entero: El canal de audio. Un
    número entre 0 y 3.

  2. time - entero: El tiempo de release en
    milisegundos. Un número entre 0 y 65535.

setSoundSustain(channel, sustain)

Procedimiento para fijar el volumen de sustain de un canal de
audio como un porcentaje de su volumen máximo.

Argumentos:

  1. channel - entero: El canal de audio. Un
    número entre 0 y 3.

  2. sustain - entero: El volumen de sustain
    como un porcentaje del volumen máximo. Un número
    entre 0 y 3 con el siguiente significado:

    0: 0% del volumen
    máximo
    1: 33% del volumen
    máximo
    2: 67% del volumen
    máximo
    3: 100% del volumen
    máximo

setSoundVolume(channel, volume)

Procedimiento para fijar el volumen máximo de un canal de
audio.

Argumentos:

  1. channel - entero: El canal de audio. Un
    número entre 0 y 3.

  2. volume - entero: El volumen
    máximo. Un número entre 0 y 15.

setSoundWave(channel, waveform)

Procedimiento para redefinir la forma de onda para un canal de
audio. Al iniciar la ejecución de un programa, los cuatro canales
de audio tienen una onda cuadrada.

Argumentos:

  1. channel - entero: El canal de audio. Un
    número entre 0 y 3.

  2. waveform - arreglo de enteros: Un arreglo
    de 256 enteros con valores -128 y 127.

setSpriteColor(index, red, green, blue)

Procedimiento para almacenar los componentes rojo, verde y azul en
uno de los 15 registros de color para sprites.

Argumentos:

  1. index - entero: El registro de color. Es
    un número entre 0 y 14.

  2. red - entero: El componente rojo del
    color. Es un número entre 0 y 31.

  3. green - entero: El componente verde del
    color. Es un número entre 0 y 31.

  4. blue - entero: El componente azul del
    color. Es un número entre 0 y 31.

setTileColor(index, red, green, blue)

Procedimiento para almacenar los componentes rojo, verde y azul en
uno de los 16 registros de color para tiles.

Argumentos:

  1. index - entero: El registro de color. Un
    número entre 0 y 15.

  2. red - entero: El componente rojo del
    color. Es un número entre 0 y 31.

  3. green - entero: El componente verde del
    color. Es un número entre 0 y 31.

  4. blue - entero: El componente azul del
    color. Es un número entre 0 y 31.

setTilePixels(index, pixels)

Procedimiento para modificar los pixeles de una imagen de tile en
la memoria del IAVC.

Argumentos:

  1. imageIndex - entero: Número entre
    0 y 255 para indicar a cuál de las 256 imágenes se
    le deben redefinir sus pixeles.

  2. pixels - arreglo de enteros: Arreglo con
    64 enteros, cada uno debe ser un valor entre 0 y 15. Estos valores
    se emplean para seleccionar el registro de color a emplear para
    ese pixel. Cada grupo consecutivo de 8 valores corresponde a un
    renglón de pixeles de la imagen, empezando por el
    renglón superior.

showAt(msg, x, y)

Procedimiento que coloca una secuencia de tiles en el área
de memoria de video del IAVC para desplegar un mensaje. Esta área
de memoria está organizada en 32 renglones de 64 tiles cada uno,
de los cuales únicamente es visible en la pantalla un área
de 24 renglones de 32 tiles cada uno. Los parámetros x y y de
este procedimiento son independientes del área que esté
visible en ese momento en la pantalla. Para mayor información ver
la documentación del procedimiento
setScreenOffset.

Argumentos:

  1. msg - número o string: El mensaje
    a desplegar

  2. x - entero: La posición horizontal
    donde debe desplegarse el mensaje. Es un número entre 0 y
    63.

  3. y - entero: La posición vertical
    del tile. Es un número entre 0 y 31.

soundOff(channel)

Procedimiento para terminar la generación de un sonido en
uno de los canales de audio. Al ejecutarlo se inicia el release.

Argumentos:

  1. channel - entero: El canal de audio. Un
    número entre 0 y 3.

soundOn(channel)

Procedimiento para iniciar la generación de un sonido en
uno de los canales de audio. Al ejecutarlo se inicia el attack.

Argumentos:

  1. channel - entero: El canal de audio. Un
    número entre 0 y 3.

Archivos

Estos procedimientos permiten leer archivos de datos. También
hay aquí procedimientos para ejecutar instrucciones contenidas en
un archivo.

readFile(filename)

Función para leer los datos de un archivo.

Argumentos:

  1. filename - string: El nombre del
    archivo.

Devuelve:

Un arreglo de enteros. La longitud del arreglo es igual al
tamaño del archivo. Cada elemento del arreglo contiene un
valor entre 0 y 255 que representa el byte correspondiente dentro
del archivo.

readSpritesFile(filename)

Función para leer los datos de un archivo creado con el
simpleJ sprites editor™.

Devuelve un ambiente con tres variables:

  1. colors: Contiene una referencia a un
    arreglo con 16 elementos, uno para cada uno de los 15 registros de
    color más un color que se emplea en el sprites
    editor
    ™ para representar los pixeles transparentes
    (ese último color normalmente no se emplea dentro de un
    programa pero de todas maneras lo devuelve la función
    readSpritesFile porque es parte del
    archivo). Cada uno de estos 16 elementos contiene una referencia a
    un ambiente; cada uno de estos ambientes contiene tres variables:
    red, green, y
    blue; estas variables contienen un
    número entre 0 y 31 para indicar el valor de los
    componentes rojo, verde y azul para ese registro de color.

  2. largePixels: Contiene una referencia a un
    arreglo con 128 elementos, un elemento para cada una de las
    imágenes de 16 por 16 pixeles. Cada uno de esos elementos,
    es a su vez una referencia a un arreglo con 256 números que
    indican el color a emplear para cada uno de los 16 por 16 pixeles
    que tiene cada imagen grande para los sprites.

  3. smallPixels: Contiene una referencia a un
    arreglo con 128 elementos, un elemento para cada una de las
    imágenes de 8 por 8 pixeles. Cada uno de esos elementos, es
    a su vez una referencia a un arreglo con 64 números que
    indican el color a emplear para cada uno de los 8 por 8 pixeles
    que tiene cada imagen pequeña para los sprites.

readTilesFile(filename)

Función para leer los datos de un archivo creado con el
simpleJ tiles editor™.

Devuelve un ambiente con tres variables:

  1. colors: Contiene una referencia a un
    arreglo con 16 elementos, uno para cada registro de color. Cada
    uno de estos 16 elementos contiene una referencia a un ambiente;
    cada uno de estos ambientes contiene tres variables:
    red, green, y
    blue; estas variables contienen un
    número entre 0 y 31 para indicar el valor de los
    componentes rojo, verde y azul para ese registro de color.

  2. pixels: Contiene una referencia a un
    arreglo con 256 elementos, un elemento para cada tile modificable.
    Cada uno de esos elementos es a su vez una referencia a un arreglo
    con 64 números que indican el color a emplear para cada uno
    de los 8 por 8 pixeles que tiene la imagen de cada tile.

  3. rows: Contiene un arreglo con 24
    elementos, uno por cada renglón de la pantalla, y cada uno
    de esos elementos es a su vez un arreglo con 32 números,
    uno por cada columna de la pantalla.

source(filename)

Procedimiento para leer, compilar y ejecutar las instrucciones
contenidas en un archivo. Las instrucciones se ejecutan dentro del
contexto del ambiente actual al ejecutar el llamado al procedimiento
source. Las variables y procedimientos que se
definan dentro de ese archivo quedan dentro del ambiente actual, en el
que fue llamado el procedimiento source.

Argumentos:

  1. filename - string: El nombre del
    archivo.

source(filename, env)

Procedimiento para leer, compilar y ejecutar las instrucciones
contenidas en un archivo. Las instrucciones se ejecutan dentro del
contexto del ambiente env. Las variables y
procedimientos que se definan dentro de ese archivo quedan dentro del
ambiente indicado por el argumento env.

Argumentos:

  1. filename - string: El nombre del
    archivo.

  2. env - ambiente: El ambiente donde deben
    quedar los procedimientos y variables definidos dentro del
    archivo.

Arreglos

Procedimientos y funciones para manipular arreglos.

arrayCopy(src, srcOffset, dst, dstOffset,
count)

Procedimiento para copiar elementos de un arreglo a otro. Copia
del arreglo src los elementos desde
srcOffset hasta srcOffset + count - 1 al
arreglo dst en las posiciones que van de
dstOffset hasta dstOffset + count - 1.

Argumentos:

  1. src - arreglo: Arreglo de donde se van a
    copiar unos elementos.

  2. srcOffset - entero: Subíndice
    dentro del arreglo src a partir del cual se van a tomar los
    elementos para copiarlos.

  3. dst - arreglo: Arreglo a donde se van a
    copiar unos elementos.

  4. dstOffset - entero: Subíndice
    dentro del arreglo dst a partir del cual se van
    a colocar los elementos.

  5. count - entero: Cuántos elementos
    se van a copiar.

length(arr)

Función que devuelve la longitud de un arreglo.

Argumentos:

  1. arr - arreglo: El arreglo.

Devuelve:

La longitud del arreglo arr.

range(lower, upper)

Función que devuelve un nuevo arreglo llenado con enteros
consecutivos desde lower hasta
upper.

Argumentos:

  1. lower - entero: El valor para el primer
    elemento del arreglo.

  2. upper - entero: El valor para el
    último elemento del arreglo.

Devuelve:

Un arreglo con upper - lower + 1 elementos.
Conteniendo los enteros consecutivos desde lower
hasta upper.

Ambientes

Procedimientos y funciones para manipular ambientes.

getNames(env)

Función que devuelve los nombres de todos las variables
dentro de un ambiente.

Argumentos:

  1. env - ambiente: El ambiente del cual hay
    que obtener la lista de nombres.

Devuelve:

Un arreglo de strings donde cada elemento es el nombre de
una variable en el ambiente env.

getValues(env)

Función que devuelve los valores de todas las variables
dentro de un ambiente.

Argumentos:

  1. env - ambiente: El ambiente del cual hay
    que obtener la lista de valores.

Devuelve:

Un arreglo de valores, con un valor por cada variable en el
ambiente env.

hasName(name)

Función para averiguar si existe una variable con cierto
nombre en el ambiente actual.

Argumentos:

  1. name - string: El nombre de la
    variable.

Devuelve:

true si existe una variable con ese
nombre dentro del ambiente actual, de lo contrario devuelve
false.

hasName(name, env)

Función para averiguar si existe una variable con cierto
nombre en un ambiente.

Argumentos:

  1. name - string: El nombre de la
    variable.

  2. env - ambiente: El ambiente.

Devuelve:

true si existe una variable con ese
nombre en el ambiente env, de lo contrario
devuelve false.

removeName(name)

Procedimiento que elimina una variable del ambiente actual.

Argumentos:

  1. name - string: El nombre de la variable a
    eliminar. Si no existe en el ambiente actual una variable con ese
    nombre, entonces no hace nada.

removeName(name, env)

Procedimiento que elimina una variable de un ambiente.

Argumentos:

  1. name - string: El nombre de la variable a
    eliminar. Si no existe en el ambiente una variable con ese nombre,
    entonces no hace nada.

  2. env - ambiente: El ambiente del cual hay
    que eliminar la variable.

Tipos

Funciones para preguntar acerca del tipo de algún
valor.

isArray(obj)

Función para determinar si un valor es de tipo
arreglo.

Argumentos:

  1. obj - cualquier tipo: El valor.

Devuelve:

true si obj es un
arreglo, de lo contrario devuelve
false.

isBoolean(obj)

Función para determinar si un valor de tipo booleano. Los
únicos valores booleanos son true y
false.

Argumentos:

  1. obj - cualquier tipo: El valor.

Devuelve:

true si obj es un
booleano, de lo contrario devuelve
false.

isCollection(obj)

Función para determinar si un valor es de tipo
colección. Las colecciones son:

  1. Queue (cola)

  2. Set (conjunto)

  3. Stack (pila)

Argumentos:

  1. obj - cualquier tipo: El valor.

Devuelve:

true si obj es una
cola, un conjunto o una pila, de lo contrario devuelve
false.

isNumber(obj)

Función para determinar si un valor de tipo
numérico. Los enteros y los flotantes son
numéricos.

Argumentos:

  1. obj - cualquier tipo: El valor.

Devuelve:

true si obj es un
entero o un flotante, de lo contrario devuelve
false.

isProcedure(obj)

Función para determinar si un valor es de tipo procedure
(una función es un caso especial de un procedimiento).

Argumentos:

  1. obj - cualquier tipo: El valor.

Devuelve:

true si obj es un
procedure, de lo contrario devuelve
false.

isQueue(obj)

Función para determinar si un valor es una cola
(queue).

Argumentos:

  1. obj - cualquier tipo: El valor.

Devuelve:

true si obj es una
cola, de lo contrario devuelve false.

isSet(obj)

Función para determinar si un valor es un conjunto
(set).

Argumentos:

  1. obj - cualquier tipo: El valor.

Devuelve:

true si obj es un
conjunto, de lo contrario devuelve
false.

isStack(obj)

Función para determinar si un valor es una pila
(stack).

Argumentos:

  1. obj - cualquier tipo: El valor.

Devuelve:

true si obj es una
pila, de lo contrario devuelve false.

isString(obj)

Función para determinar si un valor es un string.

Argumentos:

  1. obj - cualquier tipo: El valor.

Devuelve:

true si obj es un
string, de lo contrario devuelve
false.

Estructuras de datos

Además de los arreglos y los ambientes,
simpleJ™ también tiene soporte para tres
tipos de contenedores: colas (queues), conjuntos (sets) y pilas (stacks).
Un contenedor es una estructura que contiene cero o más
datos.

Estos contenedores están implementados como ambientes que
contienen los datos y procedimientos para operar sobre estos datos. Estos
contenedores se crean por medio de unas funciones especiales que se llaman
constructores.

Queue()

Constructor que crea una nueva cola. Una cola es una estructura
que puede contener varios valores. Los valores se agregan al final de la
cola y se extraen del principio de la cola.

Ejemplo:

var q = Queue();

q.put(1);
q.put(2);
q.put("abc");
q.put([10, 20, 30]);

while (!q.isEmpty())
  print(q.get());

q.contains(element)

Función para averiguar si la cola contiene un
dato.

Argumentos:

  1. element - cualquier tipo: El
    dato.

Devuelve:

true si la cola contiene el dato
element, de lo contrario devuelve
false.

q.createWith(data)

Función que crea una nueva cola, la cual contiene los
datos de otra estructura.

Argumentos:

  1. data - arreglo, queue, set o stack: La
    estructura que contiene los datos con los cuales hay que crear
    la cola.

Devuelve:

Una cola conteniendo los datos que se encuentran dentro de
data.

q.get()

Función que devuelve el primer elemento de la cola (y lo
quita de la cola).

Devuelve:

El primer elemento de la cola.

q.isEmpty()

Función para averiguar si la cola está
vacía (si no contiene ningún elemento).

Devuelve:

true si la cola está
vacía, de lo contrario devuelve
false.

q.put(element)

Procedimiento que agrega un elemento al final de la cola.

Argumentos:

  1. element - cualquier tipo: El elemento
    que se debe agregar al final de la cola.

q.putAll(data)

Procedimiento que agrega a la cola todos los datos de otra
estructura.

Argumentos:

  1. data - arreglo, queue, set o stack: La
    estructura que contiene los datos que hay que agregar al final
    de la cola.

q.removeAll()

Procedimiento que elimina todos los datos de la cola. Justo
después de llamar a este procedimiento, un llamado a
q.isEmpty() devuelve true.

q.size()

Procedimiento para averiguar cuántos elementos contiene
la cola.

Devuelve:

Un entero con el número de elementos que hay en la
cola.

q.toArray()

Función para crear un arreglo con los elementos que
están en la cola.

Devuelve:

Un arreglo que contiene los elementos que están en
la cola.

Set()

Constructor que crea un nuevo conjunto. Un conjunto es una
estructura que no contiene duplicados de ninguno de sus
elementos.

Ejemplo:

var s = Set();

s.put(1);
s.put(2);
s.put(1);
s.put("abc");

print(s.contains(1));
s.remove(1);
print(s.contains(1));

s.contains(element)

Función para averiguar si el conjunto contiene un
dato.

Argumentos:

  1. element - cualquier tipo: El
    dato.

Devuelve:

true si el conjunto contiene el dato,
de lo contrario devuelve false.

s.createWith(data)

Función que crea un nuevo conjunto, el cual contiene los
datos de otra estructura. Si un elemento está dos o más
veces en la estructura de datos, sólo aparece una sola vez
dentro del conjunto.

Argumentos:

  1. data - arreglo, queue, set o stack: La
    estructura que contiene los datos con los cuales hay que crear
    el conjunto.

Devuelve:

Un conjunto conteniendo los datos que se encuentran dentro
de data.

s.isEmpty()

Función para averiguar si el conjunto está
vacío (si no contiene ningún elemento).

Devuelve:

true si el conjunto está
vacío, de lo contrario devuelve
false.

s.put(element)

Procedimiento que agrega un elemento a un conjunto. Si ya estaba
ese elemento dentro del conjunto, entonces no hace nada.

Argumentos:

  1. element - cualquier tipo: El elemento
    que se debe agregar al conjunto.

s.putAll(data)

Procedimiento que agrega al conjunto todos los datos de otra
estructura. Si un elemento está dos o más veces en la
estructura de datos, sólo aparece una sola vez dentro del
conjunto.

Argumentos:

  1. data - arreglo, queue, set o stack: La
    estructura que contiene los datos que hay que agregar al
    conjunto.

s.remove(element)

Procedimiento que elimina un dato del conjunto. Si ese dato no
pertenecía al conjunto, entonces no hace nada.

Argumentos:

  1. element - cualquier tipo: El elemento
    que hay que eliminar del conjunto.

s.removeAll()

Procedimiento que elimina todos los datos del conjunto. Justo
después de llamar a este procedimiento, un llamado a
s.isEmpty() devuelve true.

s.size()

Procedimiento para averiguar cuántos elementos contiene
el conjunto.

Devuelve:

Un entero con el número de elementos que hay en el
conjunto.

s.toArray()

Función para crear un arreglo con los elementos que hay
en el conjunto.

Devuelve:

Un arreglo que contiene los elementos que están en
el conjunto.

Stack()

Constructor que crea una nueva pila. Una pila es una estructura
que puede contener varios valores. Los valores se agregan en la parte
superior de la pila y se extraen de la parte superior de la pila.

Ejemplo:

var s = Stack();

s.put(1);
s.put(2);
s.put("abc");
s.put([10, 20, 30]);

while (!s.isEmpty())
  print(s.get());

s.contains(element)

Función para averiguar si la pila contiene un
dato.

Argumentos:

  1. element - cualquier tipo: El
    dato.

Devuelve:

true si la pila contiene el dato
element, de lo contrario devuelve
false.

s.createWith(data)

Función que crea una nueva pila, la cual contiene los
datos de otra estructura.

Argumentos:

  1. data - arreglo, queue, set o stack: La
    estructura que contiene los datos con los cuales hay que crear
    la pila.

Devuelve:

Una pila conteniendo los datos que se encuentran dentro de
data.

s.isEmpty()

Función para averiguar si la pila está
vacía (si no contiene ningún elemento).

Devuelve:

true si la pila está
vacía, de lo contrario devuelve
false.

s.pop()

Función que devuelve el elemento que está en la
parte superior de la pila (y lo quita de la pila).

Devuelve:

El elemento que está en la parte superior de la
pila.

s.push(element)

Procedimiento que agrega un elemento en la parte superior de la
pila.

Argumentos:

  1. element - cualquier tipo: El elemento
    que se debe agregar en la parte superior de la pila.

s.putAll(data)

Procedimiento que agrega a la pila todos los datos de otra
estructura.

Argumentos:

  1. data - arreglo, queue, set o stack: La
    estructura que contiene los datos que hay que agregar en la
    parte superior de la pila.

s.removeAll()

Procedimiento que elimina todos los datos de la pila. Justo
después de llamar a este procedimiento, un llamado a
s.isEmpty() devuelve true.

s.size()

Procedimiento para averiguar cuántos elementos contiene
la pila.

Devuelve:

Un entero con el número de elementos que hay en la
pila.

s.toArray()

Función para crear un arreglo con los elementos que hay
en la pila.

Devuelve:

Un arreglo que contiene los elementos que están en
la pila.

append(a, b)

Función para crear una nueva estructura que contiene todos
los elementos de otras dos estructuras. Cada una de las estructuras
puede ser un arreglo, una cola, un conjunto o una pila. No es necesario
que las dos estructuras sean del mismo tipo. La estructura creada es del
mismo tipo que el primer argumento.

Argumentos:

  1. a - arreglo, queue, set o stack: La
    primera estructura.

  2. b - arreglo, queue, set o stack: La
    segunda estructura.

Devuelve:

Una estructura, del mismo tipo que la estructura
a, que contiene todos los elementos de las
estructuras a y b.

chooseOne(data)

Función que devuelve al azar uno de los elementos de una
estructura. Todos los elementos tienen la misma probabilidad de ser
seleccionados.

Argumentos:

  1. data - arreglo, queue, set o stack: La estructura.

Devuelve:

Uno de los elementos de la estructura escogido
aleatoriamente.

contains(data, element)

Función para averiguar si una estructura contiene un
dato.

Argumentos:

  1. data - arreglo, queue, set o stack: La
    estructura.

  2. element - cualquier tipo: El dato.

Devuelve:

true si la estructura contiene el dato
element, de lo contrario devuelve
false.

max(data)

Función que devuelve el elemento más grande de una
estructura de datos. Todos los datos dentro de la estructura deben ser
números o strings (no se pueden mezclar). En el caso de que sean
números, el elemento más grande es el más cercano
al infinito positivo. En el caso de que sean strings, el elemento mayor
es el último al ordenarlos en orden "alfabético". Es un
error llamar esta función con una estructura vacía.

Note

Para la computadora todas las letras mayúsculas vienen
antes que todas la minúsculas. Es decir que la
Z viene antes que la
a.

Argumentos:

  1. data - arreglo, queue, set o stack: La
    estructura.

Devuelve:

El elemento más grande de la estructura.

min(data)

Función que devuelve el elemento más pequeño
de una estructura de datos. Todos los datos dentro de la estructura
deben ser números o strings (no se pueden mezclar). En el caso de
que sean números, el elemento más pequeño es el
más cercano al infinito negativo. En el caso de que sean strings,
el elemento menor es el primero al ordenarlos en orden
"alfabético". Es un error llamar esta función con una
estructura vacía.

Note

Para la computadora todas las letras mayúsculas vienen
antes que todas la minúsculas. Es decir que la
Z viene antes que la
a.

Argumentos:

  1. data - arreglo, queue, set o stack: La
    estructura.

Devuelve:

El elemento más pequeño de la
estructura.

prod(data)

Función que devuelve el producto (multiplicación) de
todos los elementos de una estructura. Todos estos elementos tienen que
ser números.

Argumentos:

  1. data - arreglo, queue, set o stack: La
    estructura.

Devuelve:

El producto de todos los elementos en la estructura. Si la
estructura está vacía, entonces devuelve un
uno.

size(data)

Función para averiguar cuántos elementos contiene
una estructura.

Argumentos:

  1. data - arreglo, queue, set o stack: La
    estructura.

Devuelve:

Un entero con el número de elementos en la
estructura.

sort(data)

Función que devuelve una nueva estructura con los datos de
otra estructura ordenados de menor a mayor. Todos los datos dentro de la
estructura deben ser números o strings (no se pueden
mezclar).

Note

Para la computadora todas las letras mayúsculas vienen
antes que todas la minúsculas. Es decir que la
Z viene antes que la
a.

Argumentos:

  1. data - arreglo, queue, set o stack: La
    estructura.

Devuelve:

Una nueva estructura con los elementos de
data ordenados de menor a mayor. Esta nueva
estructura es del mismo tipo que data.

sum(data)

Función que devuelve la sumatoria (suma) de todos los
elementos de una estructura. Todos estos elementos tienen que ser
números.

Argumentos:

  1. data - arreglo, queue, set o stack: La
    estructura.

Devuelve:

La sumatoria de todos los elementos en la estructura. Si la
estructura está vacía, entonces devuelve un
cero.

toArray(data)

Función que crea un nuevo arreglo, el cual contiene los
datos de otra estructura.

Argumentos:

  1. data - arreglo, queue, set o stack: La
    estructura que contiene los datos con los cuales hay que crear el
    arreglo.

Devuelve:

Un arreglo conteniendo los datos que se encuentran dentro de
data.

toQueue(data)

Función que crea una nueva cola, la cual contiene los datos
de otra estructura.

Argumentos:

  1. data - arreglo, queue, set o stack: La
    estructura que contiene los datos con los cuales hay que crear la
    cola.

Devuelve:

Una cola conteniendo los datos que se encuentran dentro de
data.

toSet(data)

Función que crea un nuevo conjunto, el cual contiene los
datos de otra estructura. Si un elemento está dos o más
veces en la estructura de datos, sólo aparece una sola vez dentro
del conjunto.

Argumentos:

  1. data - arreglo, queue, set o stack: La
    estructura que contiene los datos con los cuales hay que crear el
    conjunto.

Devuelve:

Un conjunto conteniendo los datos que se encuentran dentro
de data.

toStack(data)

Función que crea una nueva pila, la cual contiene los datos
de otra estructura.

Argumentos:

  1. data - arreglo, queue, set o stack: La
    estructura que contiene los datos con los cuales hay que crear la
    pila.

Devuelve:

Una pila conteniendo los datos que se encuentran dentro de
data.

Con procedimientos como argumentos

En simpleJ™ los procedimientos (y por lo
tanto también las funciones) son un dato de tipo procedure. Al
igual que cualquier otro tipo de dato se pueden asignar a una variable,
pasar como argumento a otro procedimiento o ser devuelto por una
función.

apply(proc, arr)

Procedimiento que aplica un procedimiento a los datos de un
arreglo. El número de datos que contiene el arreglo debe ser
igual al número de argumentos que espera el procedimiento. Si
proc es una función entonces
apply también se comporta como una
función (devuelve un resultado).

Ejemplo:

var p = showAt;
apply(p, ["Mensaje", 10, 12]);
print(apply(sqrt, [16]));

Argumentos:

  1. proc - procedure: El procedimiento a
    aplicar.

  2. arr - arreglo: El arreglo con los
    argumentos para el procedimiento proc.

Devuelve:

Si el valor de proc es una función
entonces devuelve el resultado de llamar esa función con los
datos del arreglo arr como argumentos. Si no es
una función, entonces no devuelve nada.

filter(pred, data)

Función que aplica un predicado a una estructura de datos y
devuelve una nueva estructura de datos que únicamente contiene
los elementos para los cuales el predicado fue cierto. Un
predicado es una función que espera un
solo argumento y devuelve true o
false. La nueva estructura es del mismo tipo que la
estructura que se le pasó como segundo argumento.

Ejemplo:

print(filter(isNumber, [1, "a", 10.0, true]));

Argumentos:

  1. pred - procedure: Función que
    espera un solo argumento y devuelve true o
    false.

  2. data - arreglo, queue, set o stack:
    Estructura con los datos que hay que filtrar.

Devuelve:

Una nueva estructura que contiene los datos de
data para los cuales pred
devolvió true. Es del mismo tipo que
data.

map(func, data)

Función que devuelve una estructura que contiene el
resultado de aplicar una función de un solo argumento a cada uno
de los elementos de una estructura.

Ejemplo:

print(map(sqrt, [1, 4, 9, 16, 25]));

Argumentos:

  1. func - procedure: Función que
    espera un solo argumento.

  2. data - arreglo, queue, set o stack:
    Estructura con los datos.

Devuelve:

Una nueva estructura que contiene los resultados de
aplicarle la función func a cada uno de
los datos en data. Es del mismo tipo que
data.

mappend(func, data)

Función que devuelve un arreglo con todos los valores que
se obtienen al aplicar una función func que espera un arreglo y
devuelve una estructura a cada uno de los elementos de una
estructura.

Ejemplo:

numeros(n) {
  return range(0, n);
}

print(mappend(numeros, [1, 5, 10]));

Argumentos:

  1. func - procedure: Función que
    espera un solo argumento y devuelve una estructura.

  2. data - arreglo, queue, set o stack:
    Estructura con los datos.

Devuelve:

Un arreglo con todos los valores que se obtienen al aplicar
la función func a cada uno de los
elementos de data.

reduce(binOp, data, firstValue)

Función que acumula todos los valores de una estructura en
un solo valor empleando un valor inicial y una función que espera
dos argumentos.

Ejemplo:

concat(s1, s2) {
  return s1 + s2;
}

print(reduce(concat, ["hola", "adios", "algo"], "xxx"));
print(reduce(concat, ["123", "456", "789"], "0"));

Argumentos:

  1. binOp - procedure: Función que
    espera dos argumentos.

  2. data - arreglo, queue, set o stack:
    Estructura con los datos.

  3. firstValue - cualquier tipo: El valor
    inicial.

Devuelve:

El resultado de acumular todos los valores de
data con firstValue empleando
la función binOp.

reducef(binOp, data)

Función que acumula todos los valores de una estructura en
un solo valor empleando una función que espera dos argumentos. Es
un error llamarla con una estructura vacía.

Ejemplo:

concat(s1, s2) {
  return s1 + s2;
}

print(reducef(concat, ["hola", "adios", "algo"]));
print(reducef(concat, ["123", "456", "789"]));

Argumentos:

  1. binOp - procedure: Función que
    espera dos argumentos.

  2. data - arreglo, queue, set o stack:
    Estructura con los datos.

Devuelve:

El resultado de acumular todos los valores de
data empleando la función
binOp.

sortQueue(q, comp)

Función que devuelve una nueva cola con los elementos de
otra cola ordenados de acuerdo al criterio especificado por una
función de dos argumentos.

Ejemplo:

mayorQue(x, valor) {
  return x > valor;
}

var q = Queue();
q.put(2);
q.put(1);
q.put(3);
q.put(5);

print(toArray(sortQueue(q, mayorQue)));

Argumentos:

  1. q - queue: Los datos que hay que
    ordenar.

  2. comp - procedure: La función de
    comparación. Esta función devuelve
    true si su primer argumento debe ir antes en
    la cola que su segundo argumento, de lo contrario devuelve
    false.

Devuelve:

Una nueva cola con los datos de q
ordenados de acuerdo al criterio indicado por la función
comp.

sortc(data, comp)

Función que devuelve una nueva estructura con los elementos
de otra estructura ordenados de acuerdo al criterio especificado por una
función de dos argumentos. No tiene mucho sentido emplear este
procedimiento para ordenar un conjunto (el orden de los elementos dentro
de un conjunto debería ser irrelevante).

Ejemplo:

mayorQue(x, valor) {
  return x > valor;
}

print(sortc([4, 2, 10, 5, 20], mayorQue));

Argumentos:

  1. data - arreglo, queue, set o stack:
    Estructura con los datos que hay que ordenar.

  2. comp - procedure: La función de
    comparación. Esta función devuelve
    true si su primer argumento debe ir antes en
    la estructura que su segundo argumento, de lo contrario devuelve
    false.

Devuelve:

Una nueva estructura con los datos de
data ordenados de acuerdo al criterio indicado
por la función comp. Es del mismo tipo que
data.

Otros

Procedimientos que no se pueden clasificar dentro de alguna de las
secciones anteriores.

error(msg)

Procedimiento que detiene la ejecución del programa con un
mensaje de error.

Argumentos:

  1. msg - string: El mensaje de error.

pause(time)

Procedimiento que suspende la ejecución de un programa
durante un tiempo determinado.

Argumentos:

  1. time - flotante: El tiempo, en segundos,
    durante el cual debe suspenderse la ejecución del
    programa.

print(obj)

Procedimiento para desplegar un valor en el Log.

Argumentos:

  1. obj - cualquier tipo: El valor a
    desplegar.

Haz click aquí para regresar a la página principal