Plataforma: | DOS32 |
Sintaxis: | include graphics.e x = palette(i, s) |
Descripción: | Cambia el color para el número de color 'i'
a 's', donde 's' es una secuencia de intensidades de color RGB: {rojo,
verde, azul}. Cada valor en 's' puede ir de 0 a 63. Si la operación
resulta existosa, se devolverá una secuencia de 3 elementos conteniendo
el color previo de 'i' y todos los píxeles en pantalla de color
'i' cambiarán al nuevo color. En cambio, si la operación
falla, se devolverá el átomo -1. |
Ejemplo: | |
x = palette(0, {15, 40, 10}) -- número de color 0 (normalmente negro) cambia a un matiz verdoso. | |
Ver también: | all_palette |
Sintaxis: | i = peek(a) o ... s = peek({a, i}) |
Descripción: | Devuelve un valor de un byte en el rango de 0 a 255
desde la dirección 'a' de la máquina, o una secuencia conteniendo
'i' bytes consecutivos, comenzando por la dirección 'a' en la memoria. |
Comentarios: | Como las direcciones son números de 32 bits,
pueden ser mayores que el entero más grande (31 bits). Las variables
que mantengan direcciones tendrán que ser declaradas como átomos.
Es más rápido leer varios bytes de una vez usando el segundo método de peek(), que leer de a un byte por vez dentro de un ciclo. Recuerde que peek() sólo toma un argumento, el cual en el segundo método se trata realmente de una secuencia de 2 elementos. |
Ejemplo: | Los siguientes son equivalentes: |
-- método 1 s = {peek(100), peek(101), peek(102), peek(103)} -- método 2 s = peek({100, 4}) | |
Ver también: | poke, peek4s, peek4u, allocate, free, allocate_low, free_low, call |
Sintaxis: | a2 = peek4s(a1) o ... s = peek4s({a1, i}) |
Descripción: | Devuelve valor de 4 bytes (32 bits) con signo en
el rango de -2147483648 a +2147483647 desde la dirección de la
máquina 'a1', o una secuencia conteniendo 'i' consecutivos valores
de 4 bytes (32 bits) con signo, comenzando en la dirección 'a1'
de memoria. |
Comentarios: | Como las direcciones son números de 32 bits, pueden ser demasiado grandes para el tipo entero de Euphoria, las variables que mantengan direcciones tendrán que ser declaradas como átomos. El mismo caso se plantea para el valor devuelto por peek4s(), el cual también tendría que ser una variable declarada como átomo. Es más rápido leer varios valores de 4 bytes de una vez usando el segundo método de peek4s(), que leer de a 4 bytes por vez dentro de un ciclo. Recuerde que peek4s() sólo toma un argumento, el cual en el segundo método se trata realmente de una secuancia de 2 elementos. |
Ejemplo: | Los siguientes son equivalentes: |
-- método 1 s = {peek4s(100), peek4s(104), peek4s(108), peek4s(112)} -- método 2 s = peek4s({100, 4}) |
|
Ver también: | peek4u, peek, poke4, allocate, free, allocate_low, free_low, call |
Sintaxis: | a2 = peek4u(a1) o ... s = peek4u({a1, i}) |
Descripción: | Devuelve un valor de 4 bytes (32 bits) sin signo
en el rango de 0 a 4294967295 desde la dirección de la máquina
'a1', o una secuencia conteniendo 'i' valores de 4 bytes sin signo consecutivos,
comenzando por la dirección 'a1' en memoria. |
Comentarios: | Como las direcciones son números de 32 bits, pueden ser demasiado grandes para el tipo entero de Euphoria, las variables que mantengan direcciones tendrán que ser declaradas como átomos. El mismo caso se plantea para el valor devuelto por peek4u(), el cual también tendría que ser una variable declarada como átomo. Es más rápido leer varios valores de 4 bytes de una vez usando el segundo método de peek4u(), que leer de a 4 bytes por vez dentro de un ciclo. Recuerde que peek4u() sólo toma un argumento, el cual en el segundo método se trata realmente de una secuancia de 2 elementos. |
Ejemplo: | Los siguientes son equivalentes: |
-- método 1 s = {peek4u(100), peek4u(104), peek4u(108), peek4u(112)} -- método 2 s = peek4u({100, 4}) | |
Ver también: | peek4s, peek, poke4, allocate, free, allocate_low, free_low, call |
Sintaxis: | include misc.e PI |
Descripción: | PI (3.14159...) ha sido definido como una constante global. |
Comentarios: | Se usaron los dígitos suficientes para lograr
la máxima exactitud posible para un átomo de Euphoria. |
Ejemplo: | |
x = PI -- x es 3.14159... | |
Ver también: | sin, cos, tan |
Plataforma: | DOS32 |
Sintaxis: | pixel(x1, s) |
Descripción: | Establece uno o más píxeles en una
pantalla gráfica de píxeles,
comenzando en el punto 's', donde 's' es una coordenada de pantalla de
2 elementos {x, y}. Si 'x1' es un átomo, un píxel se establecerá
al color indicado por 'x1'. Si 'x1' es una secuencia, entonces se establecerá
una cantidad de píxeles, comenzando en 's' y moviéndose
hacia la derecha (incrementando el valor de x, lo mismo para el calor
de y). |
Comentarios: | Cuando 'x1' es una secuencia, se utiliza un algoritmo
muy veloz para ubicar los píxeles en pantalla. Es mucho más
veloz que llamar una vez a pixel(),
con una secuencia de colores de píxeles, que llamarla varias veces,
pintando el color del píxel de a uno por vez.
En gráficos de modo 19, pixel() está altamente optimizado. Cualquier píxel que quede fuera de pantalla será seguramente recortado. |
Ejemplo 1: | |
pixel(BLUE, {50, 60}) -- el punto {50,60} se establece al color BLUE (azul) | |
Ejemplo 2: | |
pixel({BLUE, GREEN, WHITE, RED}, {50,60}) -- {50,60} establecido a BLUE (azul) -- {51,60} establecido a GREEN (verde) -- {52,60} establecido a WHITE (blanco) -- {53,60} establecido a RED (rojo) | |
Ver también: | get_pixel, graphics_mode |
Sintaxis: | i = platform() |
Descripción: | platform()
es una función interna del intérprete. Indica la plataforma
en la que se está ejecutando el programa: DOS32,
WIN32, Linux
o FreeBSD. |
Comentarios: | Cuando se está ejecutando ex.exe,
la plataforma es DOS32.
Cuando se está ejecutandoexw.exe
la plataforma es WIN32.
Cuando se está ejecutando exu
la plataforma es Linux (o
FreeBSD).
El archivo de inclusión misc.e contiene las siguiente constantes: |
global constant DOS32 = 1, WIN32 = 2, LINUX = 3, FREEBSD = 3 | |
Use platform()
cuando quiera ejecutar código diferente según la plataforma
en la que el programa se ejecute.
Se agregarán plataformas adicionales en la medida que Euphoria sea portado a nuevas máquinas y sistemas operativos. La llamada a platform() no cuesta nada. Está optimizada en tiempo de compilación para los valores enteros adecuados: 1, 2 o 3. | |
Ejemplo 1: | |
if platform() = WIN32 then -- llama a la rutina Beep del sistema err = c_func(Beep, {0,0}) elsif platform() = DOS32 then -- hace el beep sound(500) t = time() while time() < t + 0.5 do end while sound(0) else -- no hace nada (Linux/FreeBSD) end if | |
Ver también: | platform.doc |
Sintaxis: | poke(a, x) |
Descripción: | Si 'x' es un átomo, escribe un valor de un
byte en la dirección de memoria 'a'. Si 'x' es una secuencia, escribe
una secuencia de valores de un byte en posiciones consecutivas de memoria,
comenzando a partir de la dirección 'a'. |
Comentarios: | En memoria, se almacenan realmente los 8 bits inferiores de cada byte,
es decir, remainder(x,256).
Es más rápido escribir varios bytes por vez usando poke() con una secuencia de valores, que escribiendo un byte por vez dentro de un ciclo. Escribir la memoria de pantalla con poke() puede ser mucho más rápido que usar puts() o printf(), pero la programación es más complicada. En la mayoría de los casos, no se necesita velocidad. Por ejemplo, el editor de Euphoria (ed), no usa poke(). |
Ejemplo: | |
a = allocate(100) -- ubica 100 bytes en memoria -- poke() de un byte por vez: poke(a, 97) poke(a+1, 98) poke(a+2, 99) -- poke() de 3 bytes por vez: poke(a, {97, 98, 99}) | |
Programa de ejemplo: | demo\callmach.ex |
Ver también: | peek, poke4, allocate, free, allocate_low, free_low, call, safe.e |
Sintaxis: | poke4(a, x) |
Descripción: | Si 'x' es un átomo, escribe un valor de 4
bytes (32 bits) en la dirección de memoria 'a'. Si 'x' es una secuencia,
escribe una secuencia de valores de 4 bytes en posiciones consecutivas
de memoria, comenzando a partir de la dirección 'a'. |
Comentarios: | El o los valores a almacenarse no deben exceder los 32 bits de tamaño.
Es más rápido escribir varios valores de 4 bytes por vez usando poke4() con una secuencia de valores, que escribiendo un valor de 4 bytes por vez dentro de un ciclo. Los valores de 4 bytes a almacenarse pueden ser positivos o negativos. Puede leerlos, tanto con peek4s() como con peek4u(). |
Ejemplo: | |
a = allocate(100) -- ubica 100 bytes en memory -- poke4() de un valor de 4 bytes por vez: poke4(a, 9712345) poke4(a+4, #FF00FF00) poke4(a+8, -12345) -- poke4() de 3 valores de 4 bytes por vez: poke4(a, {9712345, #FF00FF00, -12345}) | |
Ver también: | peek4u, peek4s, poke, allocate, allocate_low, call |
Plataforma: | DOS32 |
Sintaxis: | include graphics.e polygon(i1, i2, s) |
Descripción: | Dibuja un polígono de 3 o más vértices
dados en 's', en una pantalla de gráficos
de píxel, usando un cierto color 'i1'. Si 'i2' vale 1, se
rellena el área, en cambio, con 0 no. |
Ejemplo: | |
polygon(GREEN, 1, {{100, 100}, {200, 200}, {900, 700}}) -- hace un triángulo sólido de color verde. | |
Ver también: | draw_line, ellipse |
Sintaxis: | position(i1, i2) |
Descripción: | Posiciona el cursor en la línea 'i1', columna
'i2', donde la esquina superior izquierda es la línea 1, columna
1. El siguiente caracter que se muestra en pantalla se imprimirá
en esa posición. position()
informará un error si la ubicación está fuera de
la pantalla. |
Comentarios: | position() trabaja en los
modos de texto y gráfico de píxel.
El sistema de coordenadas para mostrar texto es diferente del usado para mostrar píxeles. Los píxeles se muestran de forma que eñ superior izquierdo es (x=0,y=0) y la primera coordenada controla la ubicación horizontal superior derecha. En los modos de gráfico de píxel puede mostrar tanto texto como píxeles. position() solamente establece la línea y columna para el texto que se muestra, no los píxeles que dibuja. No hay una rutina correspondiente para establecer la posición del píxel siguiente. |
Ejemplo: | |
position(2,1) -- el cursor se mueve al comienzo de la segunda línea -- desde arriba | |
Ver también: | get_position, puts, print, printf |
Sintaxis: | x3 = power(x1, x2) |
Descripción: | Eleva 'x1' a la potencia 'x2'. |
Comentarios: | Los argumentos de esta función pueden ser
átomos o secuencias. Se aplican las reglas de operaciones
sobre secuencias. Las potencias de 2 se calculan muy eficientemente. |
Ejemplo 1: | |
? power(5, 2) -- se imrime 25 | |
Ejemplo 2: | |
? power({5, 4, 3.5}, {2, 1, -0.5}) -- se imprime {25, 4, 0.534522} | |
Ejemplo 3: | |
? power(2, {1, 2, 3, 4}) -- {2, 4, 8, 16} | |
Ejemplo 4: | |
? power({1, 2, 3, 4}, 2) -- {1, 4, 9, 16} | |
Ver también: | log, sqrt |
Sintaxis: | s2 = prepend(s1, x) |
Descripción: | Agrega 'x' al comienzo de la secuencia 's1'. La longitud de 's2' será length(s1) + 1. |
Comentarios: | Si 'x' es un átomo, es lo mismo que s2
= x & s1. Si 'x' es una secuencia, definitivamente no es lo mismo.
El caso en el que 's1' y 's2' son la misma variable, se maneja muy eficientemente. |
Ejemplo 1: | |
prepend({1,2,3}, {0,0}) -- {{0,0}, 1, 2, 3} -- Compare con la concatenación: {0,0} & {1,2,3} -- {0, 0, 1, 2, 3} | |
Ejemplo 2: | |
s = {} for i = 1 to 10 do s = prepend(s, i) end for -- s es {10,9,8,7,6,5,4,3,2,1} | |
Ver también: | append, operador de concatenación &, operador de formación de secuencias |
Sintaxis: | include misc.e pretty_print(fn, x, s) |
Descripción: | Imprime a un archivo o dispositivo 'fn', un objeto
'x' usando llaves { , , , }, indentación, y varias líneas
para mostrar la estructura.
Se pueden dar varias opciones en 's' para controlar la
presentación. Pase {} para elegir los valores por defecto o establezca
las opciones como se muestra: Si la longitud de 's' es menor que 8, las opciones sin especificar al final de la secuencia, mantendrán sus valores por defecto. Por ejemplo, {0, 5} seleccionará "nunca mostrar caracteres ASCII", más 5 caracteres de indentación, con valores por defecto para el resto. |
Comentarios: | La impresión comenzará en la posición
actual del cursor. Normalmente querrá llamar a pretty_print()
cuando el cursor está en la columna 1 (después de imprimir
un caracter \n). Si desea comenzar en una columna diferente, debería
llamar a position()
y especificar un valor para la opción [3]. Esto asegurará
de que la primera y última llaves en una secuencia se alineen verticalmente.
|
Ejemplo 1: | |
pretty_print(1, "ABC", {}) {65'A',66'B',67'C'} | |
Ejemplo 2: | |
pretty_print(1, {{1,2,3}, {4,5,6}}, {}) { {1,2,3}, {4,5,6} } | |
Ejemplo 3: | |
pretty_print(1, {"Lenguaje", "de Programación", "Euphoria"}, {2}) { "Lenguaje", "de Programación", "Euphoria" } | |
Ejemplo 4: | |
puts(1, "word_list = ") -- mueve el cursor a la columna 13 pretty_print(1, {{"Euphoria", 8, 5.3}, {"Programming", 11, -2.9}, {"Language", 8, 9.8}}, {2, 4, 13, 78, "%03d", "%.3f"}) -- primeras 6 de 8 opciones word_list = { { "Euphoria", 008, 5.300 }, { "Programming", 011, -2.900 }, { "Language", 008, 9.800 } } | |
Ver también: | ?, print, puts, printf |
Sintaxis: | print(fn, x) |
Descripción: | Imprime a un archivo o dispositivo 'fn', un objeto
'x' entre llaves { , , , } para mostrar la estructura. |
Ejemplo 1: | |
print(1, "ABC") -- la salida es: {65, 66, 67} puts(1, "ABC") -- la salida es: ABC | |
Ejemplo 2: | |
print(1, repeat({10,20}, 3)) -- la salida es: {{10,20},{10,20},{10,20}} | |
Ver también: | ?, pretty_print, puts, printf, get |
Sintaxis: | printf(fn, st, x) |
Descripción: | Imprime 'x' a un archivo o dispositivo 'fn', usando
la cadena de formato 'st'. Si 'x' es un átomo, entonces se imprimirá
un valor simple. Si 'x' es una secuencia, el formato en 'st' se aplicará
a los elementos sucesivos de 'x'. Así printf()
siempre toma 3 argumentos exactamente. Solamente variará la longitud
del último argumento que contiene los valores a imprimir. Los formatos
básicos son:
%d - imprime un átomo como un entero decimal Se pueden agregar los anchos de los campos al formato básico, por ejemplo, %5d, %8.2f, %10.4s. El número antes del punto decimal es el ancho mínimo del campo a usarse. El número después del punto decimal es la presición a utilizarse. Si el ancho del campo es negativo, por ejemplo, %-5d entonces el valor estará alineado a la izquierda dentro del campo. Normalmente estará alineado a la derecha. Si el ancho del campo comienza con un 0, por ejemplo, %08d se suministrarán ceros para completar el campo. Si el ancho del campo comienza con un '+', por ejemplo, %+7d entonces el signo + se imprimirá para los valores positivos. |
Comentarios: | Observe el siguiente error común: |
nombre="Juan Pérez" printf(1, "%s", nombre) -- error! | |
Esto imprimirá solo el primer caracter del
nombre (J), ya que cada elemento del nombre se toma para ser un valor
separado que se ajustará a formato. Debería decir en su
lugar: |
|
nombre="Juan Pérez" printf(1, "%s", {nombre}) -- correcto | |
Ahora, el tercer argumento de printf() es una secuencia de un elemento que contiene el ítem a formatearse. | |
Ejemplo 1: | |
tasa = 7.875 printf(miarchivo, "La tasa de interés es: %8.2f\n", tasa) La tasa de interés es: 7.88 | |
Ejemplo 2: | |
nombre="Juan Pérez" puntos=97 printf(1, "%15s, %5d\n", {nombre, puntos}) Juan Pérez, 97 | |
Ejemplo 3: | |
printf(1, "%-10.4s $ %s", {"ABCDEFGHIJKLMNOP", "XXX"}) ABCD $ XXX | |
Ver también: | sprintf, puts, open |
Sintaxis: | profile(i) |
Descripción: | Habilita o deshabilita el análisis de perfiles
en tiempo de ejecución. Trabaja tanto por conteo
de ejecución como por análisis
por tiempo. Si 'i' vale 1, entonces se habilitará el
análisis y se grabarán las muestras/conteos. Si 'i' vale
0, el análisis estará deshabilitado y no habrá registración
de ninguna naturaleza. |
Comentarios: | Después de una sentencia "with profile"
o "with profile_time", el análisis se habilita en forma
automática. Use profile(0)
para desactivalo. Use profile(1)
para activarlo nuevamente cuando la ejecución alcanza el código
sobre el que desea enfocar el análisis. |
Ejemplo 1: | |
with profile_time profile(0) ... procedure slow_routine() profile(1) ... profile(0) end procedure | |
Ver también: | trace, análisis de perfiles de ejecución, sentencias especiales de alto nivel |
Sintaxis: | include get.e a = prompt_number(st, s) |
Descripción: | Le pide al usuario que ingrese un número.
'st' es una cadena de texto que se mostrará en pantalla. 's' es
una secuencia de dos valores {inferior, superior} que determina el rango
de valores que el usuario puede ingresar. Si el usuario ingresa un número
que está fuera de este rango, se le pedirá nuevamente el
ingreso. 's' puede estar vacía,
{}, si no hay restricciones. |
Comentarios: | Si esta rutina es demasiado simple para sus necesidades,
sientase libre de copiarla y hacer una versión propia más
especializada. |
Ejemplo 1: | |
edad = prompt_number("¿Cuál es su edad? ", {0, 150}) | |
Ejemplo 2: | |
t = prompt_number("Ingrese una temperatura en ºC:\n", {}) | |
Ver también: | get, prompt_string |
Sintaxis: | include get.e s = prompt_string(st) |
Descripción: | Le pide al usuario que ingrese una cadena de texto.
'st' es una cadena que se mostrará en pantalla. La cadena que el
usuario escriba se devolverá como una secuencia, sin ningún
caracter de nueva línea. |
Comentarios: | Si el usuario escribe Ctrl+Z (indicación de fin de archivo), se devolverá "". |
Ejemplo: | |
nombre = prompt_string("¿Cuál es su nombre? ") | |
Ver también: | gets, prompt_number |
Plataforma: | DOS32, Linux, FreeBSD |
Sintaxis: | include image.e put_screen_char(i1, i2, s) |
Descripción: | Escribe cero o más caracteres en pantalla
junto con sus atributos. 'i1' especifica la línea, e 'i2' la columna
donde se debería escribir el primer caracter. La secuencia 's'
se ve como: {código ASCII1, atributo1, código ASCII2, atributo2,
...}. Cada par de elementos en 's' describe un caracter. El átomo
"código ASCII" contiene el código ASCII del caracter.
El átomo de atributos, contiene el color del texto, color del fondo
y posiblemente otra información dependiente de la plaraforma que
controle la manera en que se muestra el caracter en pantalla. |
Comentarios: | La longitud de 's' tiene que ser múltiplo
de 2. Si 's'tiene longitud 0, no se escribirá nada en la pantalla.
Es más rápido escribir varios caracteres en la pantalla con una llamada simple a put_screen_char() que escribir un caracter por vez. |
Ejemplo: | |
-- escribe AZ en la esquina superior izquierda de la pantalla -- (los atributos son dependientes de la plataforma) put_screen_char(1, 1, {'A', 152, 'Z', 131}) | |
Ver también: | get_screen_char, display_text_image |
Sintaxis: | puts(fn, x) |
Descripción: | Envía a un archivo o dispositivo 'fn', un
byte único (átomo) o una secuencia de bytes. Los 8 bits
de orden inferior de cada valor son los realmente enviados. Si 'fn' está
en pantalla, verá los caracteres mostrados. |
Comentarios: | Cuando envía una secuencia de bytes, ésta
no tiene que tener ninguna (sub)secuencia dentro de ella. Tiene que ser
únicamente una secuencia de átomos
(Típicamente una cadena de códigos ASCII).
Evite enviar 0 a la pantalla o salida estándar. Su salida se puede truncar. |
Ejemplo 1: | |
puts(SCREEN, "Ingrese su nombre: ") | |
Ejemplo 2: | |
puts(output, 'A') -- el byte 65 se enviará a output | |
Ver también: | printf, gets, open |
Sintaxis: | x2 = rand(x1) |
Descripción: | Devuelve un entero al azar desde 1 a 'x1', donde
'x1' puede ir desde 1 al valor positivo más grande del tipo entero
(1073741823). |
Comentarios: | Esta función se puede aplicar a un átomo o a todos los elementos de una secuencia. |
Ejemplo: | |
s = rand({10, 20, 30}) -- s tiene que ser: {5, 17, 23} o {9, 3, 12} etc. | |
Ver también: | set_rand |
Sintaxis: | include image.e x = read_bitmap(st) |
Descripción: | 'st' es el nombre de un archivo de mapa de bits (.bmp).
El archivo debería estar en formato de mapa de bits. Están
soportadas la mayoría de las variaciones del formato. Si se lee
exitosamente el archivo, el resultado será una secuencia de 2 elementos.
El primer elemento es la paleta, conteniendo valores de intensidad en
el rango de 0 a 255. El segundo elementos es una secuencia 2D de secuencias
que contiene una imagen de gráficos de píxel. Puede pasar
la paleta a all_palette()
(después de dividirla por 4 para escalarla). La imagen se puede
pasar a display_image().
Están soportados los mapas de bits de 2, 4, 16 o 256 colores. Si el archivo no tiene el formato correcto, se devolverá en su lugar un código de error (átomo): |
global constant BMP_OPEN_FAILED = 1, BMP_UNEXPECTED_EOF = 2, BMP_UNSUPPORTED_FORMAT = 3 | |
Comentarios: | Puede crear su propio archivo de imagen de mapa de
bits usando el Paintbrush de Windows y algunos otros programas gráficos.
También puede incorporar estas imágenes dentro de sus programas
Euphoria. |
Ejemplo: | |
x = read_bitmap("c:\\windows\\arcade.bmp") -- nota: se necesita la doble barra para obtener -- una barra simple en la cadena | |
Programa de ejemplo: | demo\dos32\bitmap.ex |
Ver también: | palette, all_palette, display_image, save_bitmap |
Sintaxis: | include machine.e (or safe.e) register_block(a, i) |
Descripción: | Agrega un bloque de memoria a la lista de bloques
seguros mantenida por safe.e (la versión
de depuración de machine.e).
El bloque comienza en la dirección 'a'. La longitud del bloque
es de 'i' bytes. |
Comentarios: | Esta rutina solamente tiene sentido para usarla con
propósitos de depuración. safe.e
rastrea los bloques de memoria en los que a su programa se le permite
ejecutar peek(),
poke(),
mem_copy(),
etc. Normalmente, estos son solo los bloques que se asignaron usando las
rutinas Euphoria allocate()
o allocate_low(),
y que no se liberaron usando las rutinas Euphoria free()
o free_low().
En algunos casos, puede adquirir bloques de memoria adicionales y externos,
quizás como resultado de llamar una rutina de C. Si está
depurando su programa usando safe.e,
usted debe registrar estos bloques externos de memoria o safe.e evitará
que usted los pueda acceder. Use unregister_block()
para desregistrar un bloque externo cuando haya terminado de usarlo.
Al incluir machine.e, obtendrá distintas versiones de register_block() y unregister_block() que no hacen nada. Esto permite ir y venir rápidamente entre la ejecución y la depuración de su programa. |
Ejemplo 1: | |
atom addr addr = c_func(x, {}) register_block(addr, 5) poke(addr, "ABCDE") unregister_block(addr) | |
Ver también: | unregister_block, safe.e |
Sintaxis: | x3 = remainder(x1, x2) |
Descripción: | Calcula el resto de la división de 'x1' por
'x2'. El resultado tendrá siempre el mismo signo que 'x1' y la
magnitud será menor que 'x2'. |
Comentarios: | Los argumentos para esta función pueden ser
átomos o secuencias. Se aplican las reglas para operaciones
sobre secuencias. |
Ejemplo 1: | |
a = remainder(9, 4) -- a es 1 | |
Ejemplo 2: | |
s = remainder({81, -3.5, -9, 5.5}, {8, -1.7, 2, -4}) -- s es {1, -0.1, -1, 1.5} | |
Ejemplo 3: | |
s = remainder({17, 12, 34}, 16) -- s es {1, 12, 2} | |
Ejemplo 4: | |
s = remainder(16, {2, 3, 5}) -- s es {0, 1, 1} | |
Ver también: | floor |
Sintaxis: | s = repeat(x, a) |
Descripción: | Crea una secuencia de longitud 'a', donde cada elemento es 'x'. |
Comentarios: | Cuando se repite una secuencia o un número
de punto flotante, el intérprete realmente no hace múltiples
copias en memoria, sino que una sola copia "se apunta a" una
cantidad de veces. |
Ejemplo 1: | |
repeat(0, 10) -- {0,0,0,0,0,0,0,0,0,0} | |
Ejemplo 2: | |
repeat("JUAN", 4) -- {"JUAN", "JUAN", "JUAN", "JUAN"} -- El intérprete creará solamente una copia de "JUAN" en memoria | |
Ver también: | append, prepend, operador de formación de secuencias |
Sintaxis: | include misc.e s2 = reverse(s1) |
Descripción: | Invierte el orden de los elementos de una secuencia. |
Comentarios: | Se crea una nueva secuencia, donde los elementos
aparecen en orden inverso, en relación a la secuencia original. |
Ejemplo 1: | |
reverse({1,3,5,7}) -- {7,5,3,1} | |
Ejemplo 2: | |
reverse({{1,2,3}, {4,5,6}}) -- {{4,5,6}, {1,2,3}} | |
Ejemplo 3: | |
reverse({99}) -- {99} | |
Ejemplo 4: | |
reverse({}) -- {} | |
Ver también: | append, prepend, repeat |
Sintaxis: | i = routine_id(st) |
Descripción: | Devuelve un número de identificación
entero, conocido como routine id,
para una función o procedimiento Euphoria definido por el usuario.
El nombre de la función o procedimiento está dado por la
secuencia de cadena 'st'. Si no puede encontrarse la rutina, se devuelve
-1. |
Comentarios: | El número de identificación puede pasarse
a call_proc() o call_func(),
para llamar indirectamente a la rutina mencionada por 'st'.
La rutina mencionada por 'st' debe estar visible, es decir llamable, en el lugar donde se usa routine_id() para obtener su número de identificación. Las llamadas indirectas a la rutina pueden aparecer en el programa antes que la definición de la rutina, pero el número de identificación se tiene que obtener después de difinir la rutina. Ver el ejemplo 2 más abajo. Una vez obtenido un routine id válido, se lo puede usar en cualquier lugar del programa para llamar aindirectamente a una rutina mediante call_proc()/call_func(). Algunos usos típicos de routine_id() son: 1. Llamar a una rutina que está definida
más adelante en el programa. Observe que las rutinas C, llamables por Euphoria, también tienen un routine id. Ver define_c_proc() y define_c_func(). |
Ejemplo 1: | |
procedure foo() puts(1, "Hola Mundo\n") end procedure integer foo_num foo_num = routine_id("foo") call_proc(foo_num, {}) -- es lo mismo que llamar a foo() | |
Ejemplo 2: | |
function apply_to_all(sequence s, integer f) -- aplica una función a todos los elementos de una secuencia sequence result result = {} for i = 1 to length(s) do -- podemos llamar a add1() aquí, aunque venga después en el programa result = append(result, call_func(f, {s[i]})) end for return result end function function add1(atom x) return x + 1 end function -- add1() está visible aquí, por lo que podemos pedir su routine id ? apply_to_all({1, 2, 3}, routine_id("add1")) -- muestra {2,3,4} | |
Ver también: | call_proc, call_func, call_back, define_c_func, define_c_proc, platform.doc |