lunes, 13 de septiembre de 2010

VECTORES

Vectores

Los vectores (arrays) junto con las listas son dos elementos estructurados habituales de un lenguje de programación. En MetaTalk se puede trabajar a modo de listas puesto que las variables no tienen un tamaño predefinido y puede crecer o disminuir con los contenidos que se les asignan. En este caso el siguiente o el antecesor se han de traducir a operaciones con los trozos (chunks) que permite direccionar el lenguaje

El caso de los vectores es tanto o más interesante. Los elementos del vector se puede indexar a partir de valores numéricos, como es usual entre corchetes.

local codics

on mouseUp
repeat with i = 1 to 3
put (i*10+1) into codics[ i ]
end repeat

put the keys of codics

repeat with i = 1 to the number of lines of (the keys of codics)
answer i & return & codics[ i ]
end repeat
end mouseUp


El número de dimensiones de los vectores no está limitado, así que se pueden construir matrices (matrix) y operar con ellas con las funciones que incorpora el lenguaje.

local matriuA, matriuB, matriuC, dimensio

on mouseUp
repeat with i = 1 to 3
repeat with j = 1 to 3
put (i&j) into matriuA[i,j]
put 2 into matriuB[i,j]
end repeat
end repeat

put matrixMultiply(matriuA, matriuB) into matriuC
put extents(matriuC) into dimensio
put "a" && extents(matriuA) && return &\
"b" && extents(matriuB) && return &\
"c" && dimensio

repeat with i = 1 to the second item of line 1 of dimensio
repeat with j = 1 to the second item of line 2 of dimensio
answer i & "," & j && matriuC[ i,j ]
end repeat
end repeat
end mouseUp

#Per si tens interés, deu donar:
# C = A * B
# 72 72 72 11 12 13 2 2 2
#132 132 132 = 21 22 23 * 2 2 2
#192 192 192 31 32 33 2 2 2


La función extents permite obtener el número de entradas; en realidad el índice menor y el mayor utilizados. Si tuviese más de una dimensión, cada rango de valores aparece en separado del siguiente por un salto de línea. La función keys también lo obtiene, además de los valores de los índices de una variable; se ha introducido aquí para comparar el tratamiento con los vectores asociativos. El interés de estos radica en la facilidad con que se implemetan los diccionarios y otros objetos que consisten en indexar los elementos por una clave no numérica. Estos son una variante de los vectores donde los elementos índice no son numéricos sino alfabéticos.

El siguiente ejemplo muestra cómo se puede generar un vector asociativo a partir de una cadena de caracteres, cómo se pueden ordenar los elementos de índice (el criterio no tiene por qué ser alfabético, pero era el más sencillo) y cómo acceder a los valores almacenados. Por si lo está pensado: sí, existe una orden combine que hace la operación inversa a split. Sencillo, ¿verdad?

local codicsTecles="codic_a=97&codic_e=101&codic_i=105&codic_o=111&codic_u=117"

on mouseUp
put "Inicialment:" && codicsTecles

answer "Antes" & return & keys( codicsTecles ) titled "Antes"
split codicsTecles by "&" and "="

put keys( codicsTecles ) into varAux
sort lines of varAux
answer "Despues" & return & varAux titled "Despues"

repeat with i = 1 to the number of lines of varAux
answer codicsTecles[ (line i of varAux) ] && return & (line i of varAux)
end repeat
end mouseUp

Amazon Music

Your IP and Google Map location

Se ha producido un error en este gadget.