Category:Amazing Hopper: Difference between revisions

Content added Content deleted
Line 2,458: Line 2,458:
No obstante, se puede acceder a una sintaxis más estándar, para algunas de las operaciones, dentro de #HIGH-LEVEL.
No obstante, se puede acceder a una sintaxis más estándar, para algunas de las operaciones, dentro de #HIGH-LEVEL.
HOPPER DESCRIPCION ALTO NIVEL
HOPPER DESCRIPCION ALTO NIVEL
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------

[a,b,c] Establece un intervalo a operar en
[a,b,c] Establece un intervalo a operar en
las matrices y vectores. Acepta
las matrices y vectores. Acepta
hasta 3 dimensiones, y se pueden
hasta 3 dimensiones, y se pueden
definir, de izquierda a derecha,
definir, de izquierda a derecha,
filas, columnas y páginas.
filas, columnas y páginas.
Las instrucciones que usan estos
Las instrucciones que usan estos
intervalos son:
intervalos son:
GET, PUT, = (asignación).
GET, PUT, = (asignación).
Para acceder a una porción de
Para acceder a una porción de
un array, por ejemplo, de 2D,
un array, por ejemplo, de 2D,
se suele hacer esto:
se suele hacer esto:

[2:3,4:end]get(array),plus'10',
[2:3,4:end]get(array),plus'10',
put(array)
put(array)
lo que obtiene una sub-matriz de
lo que obtiene una sub-matriz de
"array", de 2 filas y 7 columnas,
"array", de 2 filas y 7 columnas,
suponiendo que array tiene 10;
suponiendo que array tiene 10;
luego, suma 10 a sus elementos,
luego, suma 10 a sus elementos,
y vuelve a ponerlo en el array
y vuelve a ponerlo en el array
original.
original.
En #HIGH-LEVEL, esto se humaniza:
En #HIGH-LEVEL, esto se humaniza:
#hl{
#hl{
array[2:3,4:end] = array[2:3,4:end]+10
array[2:3,4:end] = array[2:3,4:end]+10
}
}
o bien:
o bien:
#hl{
#hl{
array[2:3,4:end] += 10
array[2:3,4:end] += 10
}
}
aunque #HIGH-LEVEL es más sencillo
aunque #HIGH-LEVEL es más sencillo
de usar, es más costoso que la
de usar, es más costoso que la
versión ensamblada de HOPPER.
versión ensamblada de HOPPER.
Ejemplos de intervalos:
Ejemplos de intervalos:
[10] fija la posición 10
[10] fija la posición 10
de un vector cualquiera;
de un vector cualquiera;
también, fija la coor-
también, fija la coor-
denada 10 de una
denada 10 de una
matriz 3D.
matriz 3D.
[10:15] fija un intervalo que va
[10:15] fija un intervalo que va
desde la posición 10
desde la posición 10
hasta la 15, dentro
hasta la 15, dentro
de cualquier vector
de cualquier vector
que la use.
que la use.
[2,4:10] fija coordenadas para
[2,4:10] fija coordenadas para
cualquier matriz 2D,
cualquier matriz 2D,
fila 2, columnas 4 a
fila 2, columnas 4 a
la 10.
la 10.
[5:end,5] fija coordenadas para
[5:end,5] fija coordenadas para
cualquier matriz 2D,
cualquier matriz 2D,
filas 5 hasta el final,
filas 5 hasta el final,
columna 5.
columna 5.
[3:4,2,2:5] fija coordenadas para
[3:4,2,2:5] fija coordenadas para
una matriz 3D, filas
una matriz 3D, filas
3 y 4, columna 2,
3 y 4, columna 2,
páginas 2 a la 5.
páginas 2 a la 5.

++i,--j,[1:i,j]
++i,--j,[1:i,j]
fija coordenadas para
fija coordenadas para
una matriz 2D, con uso
una matriz 2D, con uso
de variables que deben
de variables que deben
ser modificadas fuera de
ser modificadas fuera de
[].
[].

Nota: SE ACEPTAN variables dentro de
Nota: SE ACEPTAN variables dentro de
los [].
los [].
ACEPTA INTERVALOS. Ejemplo:
[1:2:end] trabaja sobre las posiciones
impares del array.
[1:end, 2:(f+1):end]
fija el trabajo sobre todas
las filas, pero las columnas
desde la 2 hasta el final, a
intervalos (f+1).
ACEPTA INTERVALOS. Ejemplo:
Nota: una operación aritmética dentro de
un intervalo, debe escribirse con
[1:2:end] trabaja sobre las posiciones
paréntesis.
impares del array.
ACEPTA operaciones aritméticas
[1:end, 2:(f+1):end]
dentro de []; sin embargo, no
fija el trabajo sobre todas
acepta el uso de funciones o
las filas, pero las columnas
macro-funciones.
desde la 2 hasta el final, a
{N}loc1, loc1(N) Establece la posición N de un vector
intervalos (f+1).
cualquiera. Ejemplo:
Nota: una operación aritmética dentro de
{10}loc1, get(array)
un intervalo, debe escribirse con
loc1(10), get(array)
paréntesis.
hacen lo mismo. La diferencia, es que
con el primero se pueden realizar
ACEPTA operaciones aritméticas
operaciones aritméticas:
dentro de []; sin embargo, no
{10}plus'i',loc1.
acepta el uso de funciones o
o bien
macro-funciones.
#hl( 10+i ), loc1

{N}loc1, loc1(N) Establece la posición N de un vector
cualquiera. Ejemplo:
{10}loc1, get(array)
loc1(10), get(array)
hacen lo mismo. La diferencia, es que
con el primero se pueden realizar
operaciones aritméticas:
{10}plus'i',loc1.
o bien
#hl( 10+i ), loc1


pero, con LOC1(N), no puede hacerse.
pero, con LOC1(N), no puede hacerse.
N, en este caso, es un numero o una
N, en este caso, es un numero o una
variable.
variable.
Por otro lado,
Por otro lado,
loc1(10)
loc1(10)
es similar a:
es similar a:
[10]
[10]
Nota: También se establece el número
Nota: También se establece el número
de página, en una matriz 3D.
de página, en una matriz 3D.
{F,C}loc2 Establece coordenadas para un elemento
{F,C}loc2 Establece coordenadas para un elemento
de una matriz 2D cualquiera, en fila F
de una matriz 2D cualquiera, en fila F
columna C.
columna C.
{N}offset1 Establece la posición final de un
{N}offset1 Establece la posición final de un
intervalo para un vector, iniciado
intervalo para un vector, iniciado
con LOC1.
con LOC1.
Ejemplo:
Ejemplo:
{3}loc1,{6}offset1
{3}loc1,{6}offset1
es similar a:
es similar a:
[3:6]
[3:6]
y
y
{3}loc1,{0}offset1
{3}loc1,{0}offset1
es igual a:
es igual a:
[3]
[3]
{F,C}offset2 Establece el desplazamiento en filas F
{F,C}offset2 Establece el desplazamiento en filas F
y columnas C, para un intervalo usado en
y columnas C, para un intervalo usado en
una matriz 2D cualesquiera.
una matriz 2D cualesquiera.
Si no se quiere desplazar alguna
Si no se quiere desplazar alguna
coordenada, use 0.
coordenada, use 0.
Ejemplo:
Ejemplo:
{3,2}loc2,{end,4}offset2
{3,2}loc2,{end,4}offset2
es similar a:
es similar a:
[3:end,2:4]
[3:end,2:4]
{N}interval1,
{N}interval1,
{F,C}interval2
{F,C}interval2
{F,C,P}interval3 Establecen intervalos para las marcas
{F,C,P}interval3 Establecen intervalos para las marcas
definidos por LOC1,LOC2, y OFFSET1 y
definidos por LOC1,LOC2, y OFFSET1 y
OFFSET2.
OFFSET2.
Se pueden usar junto a la forma simple:
Se pueden usar junto a la forma simple:
[1:10],{2}interval1
[1:10],{2}interval1
declara el siguiente rango de posiciones,
declara el siguiente rango de posiciones,
internamente:
internamente:
1,3,5,7,9
1,3,5,7,9
El caso es el mismo para INTERVAL2 e
El caso es el mismo para INTERVAL2 e
INTERVAL3.
INTERVAL3.

clearmark Elimina las marcas definidas por LOC1, LOC2,
clearmark Elimina las marcas definidas por LOC1, LOC2,
OFFSET1 y OFFSET2.
OFFSET1 y OFFSET2.
Esto es útil, cuando se desea asignar un
Esto es útil, cuando se desea asignar un
valor constante a una matriz.
valor constante a una matriz.
La asignación "=", por ejemplo, a=0
La asignación "=", por ejemplo, a=0
Asignará "0" a la matriz "a"; pero, si
Asignará "0" a la matriz "a"; pero, si
existen marcas, asignará "0" a las
existen marcas, asignará "0" a las
posiciones definidas por las funciones
posiciones definidas por las funciones
anteriores.
anteriores.
clearinterval Esto es necesario para borrar los intervalos
clearinterval Esto es necesario para borrar los intervalos
definidos con INTERVAL1, INTERVAL2 e
definidos con INTERVAL1, INTERVAL2 e
INTERVAL3.
INTERVAL3.
clrmarksall Activa/desactiva la ejecución de CLEARMARK y
clrmarksall Activa/desactiva la ejecución de CLEARMARK y
CLEARINTERVAL internamente, luego de la
CLEARINTERVAL internamente, luego de la
ejecución de un GET o un PUT.
ejecución de un GET o un PUT.

{M}cartesian Genera una matriz o vector con las posiciones
{M}cartesian Genera una matriz o vector con las posiciones
cuyo valor es TRUE (o equivalente), de un
cuyo valor es TRUE (o equivalente), de un
vector o matriz.
vector o matriz.
Las funciones lógicas vistas en OPERADORES
Las funciones lógicas vistas en OPERADORES
MATEMATICOS Y LOGICOS, segmento OPERACIONES
MATEMATICOS Y LOGICOS, segmento OPERACIONES
LOGICAS MATRICIALES, devuelven vectores o
LOGICAS MATRICIALES, devuelven vectores o
matrices booleanas, cuando se comparan
matrices booleanas, cuando se comparan
esta clase de datos, y pueden ser usadas
esta clase de datos, y pueden ser usadas
junto con CARTESIAN. No obstante, cualquier
junto con CARTESIAN. No obstante, cualquier
valor distinto de vacío (matrices de cadena),
valor distinto de vacío (matrices de cadena),
distinto de cero (matrices numéricas), o
distinto de cero (matrices numéricas), o
con 1's lógicos (matrices booleanas), será
con 1's lógicos (matrices booleanas), será
tomado por CARTESIAN para obtener una
tomado por CARTESIAN para obtener una
posición.
posición.
Ejemplo:
Ejemplo:
Sea "t" una matriz:
Sea "t" una matriz:
{t}gthan(5), ==> devuelve una matriz
{t}gthan(5), ==> devuelve una matriz
del tamaño de "t",
del tamaño de "t",
Line 2,666: Line 2,666:
2,4
2,4
2,5...
2,5...

range(R) Toma la matriz cartesiana R obtenida de la
range(R) Toma la matriz cartesiana R obtenida de la
instrucción CARTESIAN, y establece rangos
instrucción CARTESIAN, y establece rangos
de operación sobre matrices. No deja nada
de operación sobre matrices. No deja nada
en el stack.
en el stack.
Estos rangos se denominan:
Estos rangos se denominan:
RANGOS CARTESIANOS
RANGOS CARTESIANOS
GET, PUT, y asignación "=" son afectadas
GET, PUT, y asignación "=" son afectadas
por estos rangos especiales.
por estos rangos especiales.
Sirve para modificar elementos determinados
Sirve para modificar elementos determinados
dentro de una matriz, que no obedecen a los
dentro de una matriz, que no obedecen a los
rangos vistos con las funciones anteriores.
rangos vistos con las funciones anteriores.
Ejemplo:
Ejemplo:
{t}gthan(5), cartesian,mov(r)
{t}gthan(5), cartesian,mov(r)
range(r),get(t),mulby(100), put(t),
range(r),get(t),mulby(100), put(t),
{t} println
{t} println
Elabora un rango cartesiano con las posiciones
Elabora un rango cartesiano con las posiciones
mayores que 5, obtiene esos elementos de la
mayores que 5, obtiene esos elementos de la
forma de un vector (GET), los multiplica por 100,
forma de un vector (GET), los multiplica por 100,
y luego, los colocan nuevamente dentro de la
y luego, los colocan nuevamente dentro de la
matriz original, con PUT.
matriz original, con PUT.
Después, imprime la matriz modificada.
Después, imprime la matriz modificada.

clearrange Elimina el rango cartesiano.
clearrange Elimina el rango cartesiano.



== ESTADISTICA ==
== ESTADISTICA ==