Expresiones matemáticas

Cuando queremos evaluar una expresión matemática en tcl, es necesario indicarlo mediante el comando expr, esto se debe a que el tcl reconoce todo como una cadena de caracteres, sin importar si son números, letras o símbolos.

La evaluación de este tipo de expresiones no es muy amplia dentro de éste lenguaje, aun así provee las funciones básicas, y algunas no tan básicas que en la mayoría de los casos serán suficientes.

Para la evaluación de una expresión matemática se utiliza el comando expr seguido de la expresión a evaluar. Ejemplo:

   expr 7+5
Mostrará en la pantalla 12, que es el resultado de la operación indicada.

Si se requiere el resultado de una operación como número real lo único que se tiene que hacer es dar uno de los datos como real, ejemplo:

#!/usr/local/bin/tclsh7.4
 puts stdout [expr 10/3]
 puts stdout [expr 10/3.0]
 set tcl_precision 15
 puts stdout [expr 10/3.0]

Sustitución de comandos

La utilización del símbolo $variable es uno de los casos de sustitución permitidos por el tcl.

Otro caso es la sustitución de comandos. Es posible asignar a las variables resultados de operaciones anidando los comandos necesarios para realizar dichas operaciones.

Para indicar un comando anidado lo encerramos entre corchetes [ ], así el interprete toma todo lo que se encuentra entre éstos y lo evalúa como un comando. Ejemplo:

   set suma [expr 7+5] 
Si esto se escribiera sin los corchetes se generaría un error.

En este caso la expresión 7+5 es evaluada y su resultado se deposita en la variable suma, el shell muestra el resultado de la última operación, en este caso 12.

Es posible utilizar anidamientos sucesivos, por ejemplo:

   set num [expr [string length Palabra] / 2.0 ] 
El comando string tiene varios usos, en este ejemplo se le pidió que regresara la longitud de la cadena (length) que se le dió como tercer parámetro (Palabra) a la instrucción, en este caso mide 7 caracteres de largo; ese resultado lo dividio entre 2 y lo guardó en la variable prueba. La instrucción string será analizada con mayor detalle en el siguiente capítulo.

En el ejemplo anterior se realizó la división entre 2.0, debido a que el tcl regresa por defecto valores enteros siempre y cuando se le hayan dado datos enteros, para que regrese valores con decimales o reales es necesario que cuando menos uno de los valores sea real:

 expr [expr 3/2]+1 
Salida: 2
 expr [expr 3.0/2]+1 
Salida: 2.5 El número de digitos que muestra el tcl esta predefinido en 6, pero es posible cambiarlo modificando para ello el valor de la variable tcl_precision a la cantidad de dígitos que se deseen:

 expr 10/3 
salida: 3
 expr 10/3.0 
salida 3.33333
   set tcl_precision 12
   expr 10/3.0 
Salida: 3.33333333333

Sustitución con la diagonal invertida

Para poder utilizar símbolos con significado especial para el interprete del tcl, es necesario anteponerles una diagonal invertida "\", por ejemplo, para guardar en una variable la cadena "$50" se hara de la siguiente forma:

 set precio \$50 
salida: $50 Si se omite el símbolo "\" el interprete considerará que se desea guardar en precio el contenido de la variable 50 y no la cadena "$50", y es muy probable que se genere un error al no encontrarse la variable.

La diagonal invertida también es utilizada para indicarle al interprete que la linea de comando actual no ha terminado aún y continúa en la siguiente, es decir, evalúa dos o mas lineas como si fueran una sola:

   set hola [expr [expr 5+6] + \
   [expr 8-1]] 

Uso de las comillas

El uso de las comillas es parecido al de las llaves, con la ventaja que las comillas permiten sustituciones dentro de la cadena. Por ejemplo:

  set hola Saludos
  puts stdout "La variable hola contiene $hola"
Salida: La variable hola contiene Saludos
 puts stdout {La variable hola contiene $hola} 
Salida: La variable hola contiene $hola