• Publicidad

length

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Notapor explorer39 » 2005-11-30 13:04 @586

Desmenuzando un poco...

Hacemos un chequeo con una expresión regular (m//) a la cadena de texto $str. El resultado de ese proceso es la devolución de la parte de texto que coincide con la expresión regular. Como además, queremos repetir este proceso a lo largo de toda la cadena, ponemos el modificador g al final.

$str =~ /\w/g;El resultado es, en contexto escalar, una sola coincidencia con el patrón regular. \w corresponde a cualquier carácter que pueda formar parte de una palabra de texto. Pero esta misma instrucción, en contexto lista, nos devuelve todos los valores coincidentes con el patrón: () = $str =~ /\w/g; El paréntesis convierte a la expresión siguiente al contexto lista. Todas las coincidencias encontradas con la expresión regular -todos los caracteres (\w) encontrados en $str- son devueltos, uno a uno, y en forma de lista y se almacenan en ().

Es decir, se meten en una lista vacía, sin nombre. Es decir, se pierden (!), pero... no del todo (!). Quiero decir que el interés del resultado de la operación, no son los valores encontrados, sino el número de ellos. Los elementos encontrados se van perdiendo al irse 'metiendo' en una lista vacía... pero como luego hay una asignación a un escalar, al menos vamos recordando el 'tamaño' de la lista que estamos creando.

my $cnt = () .... Cuando el resultado de la operación anterior, que es una lista, se asigna su valor a un escalar, pues ya sabemos lo que pasa cuando se interpreta una lista en modo escalar: nos devuelve la longitud -el número de elementos de esa lista-.

O todo dicho de otra forma:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. while ( $str =~ /(\w)/g ) {
  2.     push @encontrado, $1;
  3. }
  4. my $cnt = @encontrado;
  5. undef @encontrado;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Creo que es así como funciona.
Última edición por explorer39 el 2005-11-30 13:47 @616, editado 1 vez en total
explorer39
 

Publicidad

Notapor Perl user » 2005-11-30 13:26 @601

explorer39 escribiste:Pero esta misma instrucción, en modo vectorial, nos devuelve una lista con todos los valores coincidentes con el patrón...


¿Qué tal...?

En efecto así es como funciona la expresión que puse, pero me gustaría aclarar un punto como lo hice un día en un canal de IRC de programación ante mucha gente....

Mira... desafortunadamente lo he visto (sin ofender) el "error" en mucha gente proveniente de España y alguna gente de Argentina, y por ende nosotros los mexicanos lo aprendemos (ya que muchos libros en español son provenientes de España).

Las listas NO SON VECTORES, y bueno, formalmente mucha gente experta en el campo de las ciencias computacionales han tachado tal nombre, y aunque bueno, sé que normalmente no hablamos en un lenguaje formal, solo quise aclarar pues, que no es lo mismo una lista que un vector. Vamos a dar una explicación:

En un lenguaje de programación los tipos de datos están conceptualizados por las operaciones que pueden realizar, eso es lo que los define, si hablamos de un vector, un vector tiene operaciones como el producto punto y puede ser utilizado para una multiplicación matricial, ¿cierto? ¿Acaso un "vector" en Perl u otro lenguaje ordinario soporta esas operaciones? No, no lo hace (a menos que utilices el módulo PDL para esas cosas, pero originalmente no lo hace). Entonces... formalmente una lista JAMÁS ha sido un vector, el problema es que la gente le llama vector porque en algunos lenguajes "padre" se introdujo esa palabra como un array que puede crecer a las necesidades del usuario. Pero si tomas como referencia un libro de cualquier autor de los buenos (y en inglés) de Perl, ellos jamás dicen vector... siempre es lista u array, ahora bien... ¿Cuál es la diferencia entre una lista y un array? Eso también recuerdo haberlo explicado en este foro hace mucho, en un mensaje similar...

Una lista es un conjunto de datos escalares delimitados por (), la cual tiene un contexto y puede ser asignada a una variable de tipo array.

Ahora bien, como conclusión esto nos trae como consecuencia que tampoco existen como tal los tipo de datos "matrices", en C un arreglo de arreglos NO ES UNA MATRIZ (ni tampoco un arreglo bidimensional). En Perl una "matriz" tampoco lo es, es una referencia a un arreglo de arreglos o una referencia de referencia de arreglos :)

Complejo, ¿no? ¡Nah...!

Saludos,

PD. Este mensaje sólo fue por aclarar y formalizar el punto de los "vectores", ya que yo he usado también esa palabra, en Java hay un tipo de dato Vector, sin embargo, también quise compartir el hecho de que erróneamente es llamado así.
Marco A. Manzo
[email protected]
http://www.unixmonkeys.com/amnesiac/
Perl Programming Language
Perl user
Maestro honorario
Maestro honorario
 
Mensajes: 271
Registrado: 2004-11-03 21:11 @924

Notapor explorer39 » 2005-11-30 14:45 @656

Perl user escribiste:En un lenguaje de programación los tipos de datos están conceptualizados por las operaciones que pueden realizar, eso es lo que los define, si hablamos de un vector, un vector tiene operaciones como el producto punto y puede ser utilizado para una multiplicación matricial, ¿cierto? ¿Acaso un "vector" en Perl u otro lenguaje ordinario soporta esas operaciones? No, no lo hace ( a menos que utilices el módulo PDL para esas cosas, pero originalmente no lo hace ), entonces... formalmente una lista JAMÁS ha sido un vector, el problema es que la gente le llama vector porque en algunos lenguajes "padre" se introdujo esa palabra como un array que puede crecer a las necesidades del usuario.
Corregido...

Tienes razón... lo que me pasa en mi caso es que llevo unos cuantos años trabajando en un departamento de física y los físicos lo llamaban así, como una forma de distinguirlo de una matriz de 2, 3 o más dimensiones.

He mirado el diccionario, y, lo más aproximado sería la definición dentro de la Física:
4. m. Fís. Toda magnitud en la que, además de la cuantía, hay que considerar el punto de aplicación, la dirección y el sentido. Las fuerzas son vectores.
Y sí... uso bastante el PDL... algo se pegará...

Perl user escribiste:Ahora bien como conclusión esto nos trae como consecuencia que tampoco existen como tal los tipo de datos "matrices", en C un arreglo de arreglos NO ES UNA MATRIZ ( ni tampoco un arreglo bidimensional ), en Perl una "matriz" tampoco lo es, es una referencia a un arreglo de arreglos o una referencia de referencia de arreglos :).
Sí, es cierto. Yo mismo proceso centenares de imágenes vía satélite como si fueran matrices en 2D, pero como las operaciones las hago de píxel en píxel, en realidad lo leo todo como un sólo vector. PERDÓN, ¡¡¡se me ha vuelto a escapar!!!

Prometo que intentaré no usar el nombre de vector en vano.

Y además... mientras estaba escribiendo esto, he investigado un poco y me parece que encontré la raíz del mal: en el libro "El lenguaje de programación C" de Kernighan y Ritchie -traducción al español-, al final de la sección 2.3 dice:
Técnicamente, una cadena de caracteres es un vector cuyos elementos son caracteres. ...
para luego no nombrar la palabra vector nunca más y sí en cambio usar la palabra 'arreglo' -capítulo 5-, que en sentido estricto tampoco se podría aplicar, porque la acepción más cercana que encuentro en la DRAE es
2. m. Regla, orden, coordinación.
salvo que esté equivocado.

Naturalmente, en el libro en inglés, a todo esto lo llaman 'arrays', que según los diccionarios consultados en Internet, de inglés a castellano, son 'conjuntos'.

Entonces, mientras la definición más cercana a nosotros de 'lista' en la DRAE es:
3. f. Enumeración, generalmente en forma de columna, de personas, cosas, cantidades, etc., que se hace con determinado propósito.
resulta que hay varias definiciones de 'conjunto' que sí se pueden aplicar:
4. m. Agregado de varias personas o cosas.
6. m. Totalidad de los elementos o cosas poseedores de una propiedad común, que los distingue de otros; p. ej., los números pares.
10. m. Mat. Totalidad de los entes matemáticos que tienen una propiedad común. El conjunto de los números primos.
¿Se puede deducir entonces que es mejor aplicar la palabra conjunto que arreglo y lista? Pregunto...

Yo prefiero llamarle entonces lista, porque aparece en la documentación en inglés como 'list'.

Para liar más la madeja...

En la Wikipedia -ojo, no es sagrado todo lo que dice-, la definición de Array es:
In computer programming, an array, also known as a vector or list, ...
y vamos... cuando Perl user entre a ver la correspondiente traducción de Array al castellano, se tirará de los pelos:
Un array (más correctamente denominado vector), es un conjunto de variables o registros del mismo tipo... [...] Los array de 1 dimensión se denominan vectores, los de 2 o más dimensiones se denominan matrices.
Y si pretendéis buscar la definición de vector en castellano, os lleva a la de Array, pero antes, pasa por esta página en la que creo que entonces volvemos al principio: Perl user indica que a un vector se le podría operar con la operación punto, y aquí es donde ya no estamos de acuerdo... porque para mi es claro que a un vector matemático le puedo operar con esa operación o con cualquier otra que maneje vectores, pero cuando hago un programa y coloco una lista, sé que se trata de un conjunto de elementos y no voy a operar con él como si fuese una entidad matemática.

Seguiré preguntando a la gente de informática por aquí, pero creo que estarán de acuerdo con las definiciones que aparecen en la página Vector de Wikipedia aunque no coincidan con la DRAE.
explorer39
 

Notapor Perl user » 2005-11-30 15:32 @689

¿Qué tal?

En efecto, si indagáramos más, descubriríamos que los términos empleados en la computación (muchos, por no decir la mayoría) son DEMASIADO abstractos, encontrar nombres "adecuados" es un poco difícil.

Aunque ya nos salimos del tema principal de este hilo supongo que es válido seguir hablando de eso aquí :)

Por ejemplo, el concepto de vector en física, es completamente correcto y como podrás observar no es realmente aplicable a los campos computacionales. Y en efecto, muchos libros como mencioné, traducidos al castellano tienen "errores" similares.

Ahora bien, conjunto es correcta tu definición de la RAE, sin embargo matemáticamente un conjunto es un grupo de elementos que NO se pueden repetir en un mismo espacio, y en un array (o lista) es posible hacerlo, por lo tanto tampoco aplicaría formalmente la palabra conjunto (en algunos lenguajes un conjunto o su palabra en inglés "set" existe como tipo de dato).

Yo normalmente prefiero llamarlos arrays o listas así llanamente, pero como mencioné, aun en ocasiones también suelo mencionar la palabra "Vector".

Y coincido, Wikipedia tampoco es la verdad absoluta de la vida. :)

Ahora bien: no, no me molesta leer la palabra vector como array, o viceversa... solo pues fue un punto de aclaración, yo también hablo el castellano y cuando me dicen vector entiendo perfectamente de lo que me hablan, solo fue pues para abordar uno de los errores que tiene nuestra lengua. :)

Es como traducir "thread", "buffer", "widget", "gadget" y otros muchos conceptos "huecos". :)

Saludos,
Marco A. Manzo
[email protected]
http://www.unixmonkeys.com/amnesiac/
Perl Programming Language
Perl user
Maestro honorario
Maestro honorario
 
Mensajes: 271
Registrado: 2004-11-03 21:11 @924

Notapor monoswim » 2005-12-01 11:05 @503

Kidd, Explorer39, Perl user:

¡¡¡ El 90% de su peso corporal lo deben tener dentro del craneo !!!

¿¿¿ Pueden caminar bien o necesitan ayuda con esas cabezotas ???

¡¡¡ Gracias por compartir sus conocimientos !!!

¡¡¡ Aunque no lo crean ayudan mucho !!!

Saludos
MonoSwim
Perl Programming Language
Avatar de Usuario
monoswim
Perlero nuevo
Perlero nuevo
 
Mensajes: 452
Registrado: 2003-11-18 16:13 @717
Ubicación: Buenos Aires

Notapor explorer39 » 2005-12-01 17:06 @754

¡¡¡Esto es pescado fresco, fresco... del día, señora!!! :D

String::Util

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use String::Util 'nospace';
  2. print ": ingrese una oración\n";
  3. chomp($oracion = <STDIN>);
  4. print lenght( nospace $oracion );
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
explorer39
 

Notapor juan » 2005-12-25 21:52 @952

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use String::Util 'nospace';
  2. print ": ingrese una oración\n";
  3. chomp($oracion = <STDIN>);
  4. print lenght( nospace $oracion );
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Cuando lo ejecuto me arroja lo siguiente:
Can't locate String/Util.pm in @INC (@INC contains: C:/Perl/lib C:/Perl/site/lib .) at Untitled line 3.
BEGIN failed--compilation aborted at Untitled line 3.

¿¿Por qué podría ser?? :roll:

Se me ocurrió borrar la primera línea, y cuando corrijo la sintaxis da Ok, pero cuando lo ejecuto me arroja:
Can't locate object method "nospace" via package "oa sa so" (perhaps you forgot
to load "oa sa so"?) at C:\DOCUME~1\TITA\CONFIG~1\Temp\dirF6.tmp\Untitled line 5
, <STDIN> line 1.
Presione una tecla para continuar . . .

:shock:

Disculpen la ignorancia pero Perl se está haciendo casi un karma, ¡ji,ji! :wink:
juan
Perlero nuevo
Perlero nuevo
 
Mensajes: 9
Registrado: 2005-11-27 06:37 @317

Re: length

Notapor explorer » 2005-12-26 06:42 @321

Te falta instalar el módulo. Tienes que bajártelo de CPAN...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Instalar modulos

Notapor macgregor » 2005-12-28 06:24 @308

Hola a todos.

Juan, para poder instalarte el módulo que te falta o los que necesites en el futuro te recomiendo que mires el mensaje que escribí hace algún tiempo.
Por el error que te da veo que usas Perl desde Windows, así que espero que te resulte útil.

http://perlenespanol.com/foro/viewtopic.php?t=416&highlight=

Un saludo.
MACGREGOR [TM]
Avatar de Usuario
macgregor
Perlero nuevo
Perlero nuevo
 
Mensajes: 80
Registrado: 2004-12-09 07:32 @355
Ubicación: españa

Anterior

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 31 invitados

cron