Vi è mai capitato di inserire un euro in una macchinetta del caffè e ricevere un bicchiere vuoto? Una bella scocciatura e non serve prenderla a calci, lei rimarrà impassibile e si terrà pure il vostro euro!

Per fortuna che in Tcl queste cose non accadono: se vogliamo ottenere il risultato di un comando, non dobbiamo far altro che inserirlo all’interno di una coppia di parentesi quadre [...].

Possiamo assimilare questa tecnica del Tcl al funzionamento di una generica funzione la cui caratteristica fondamentale è proprio quella di restituire sempre un risultato.

puts "x = [set x [set y 6]]"
---
x = 6

Regola generale

L’interprete Tcl normalmente esegue dei passi predefiniti. Nel nostro caso:

  1. Valuta il comando più interno, ovvero set y 6 assegnando il valore 6 alla variabile y;
  2. Sostituisce la parte racchiusa tra la coppia interna di parentesi quadre [set y 6] con il valore restituito dal comando set, ovvero il valore 6;
  3. Valuta il comando set più esterno assegnando alla variabile x il valore 6 ottenuto con la sostituzione precedente;
  4. Sostituisce la parte racchiusa tra la coppia esterna di parentesi quadre con il valore restituito dal comando set, ovvero il valore 6;
  5. Valuta il comando puts utilizzando come argomento il contenuto racchiuso all’interno della coppia di doppie virgolette alte.

Eccezioni alla regola

Caso 1

Se una coppia di parentesi quadre è preceduta dalla barra rovesciata o è all’interno di una coppia di parentesi graffe, l’interprete non esegue alcuna sostituzione.

set z "\[set x [set y 6]]"
puts "z = $z\n"
---
z = [set x 6]
set z "[set x {[set y 6]}]"
puts "z = $z\n"
---
z = [set y 6]
set z {[set x [set y 6]]}
puts "z = $z\n"
---
z = [set x [set y 6]]

Caso 2

Se inseriamo una coppia di parentesi graffe all’interno di una coppia di doppie virgolette alte, le parentesi graffe perdono la loro funzione e diventano dei semplici caratteri grafici e quindi eventuali parentesi quadre al loro interno tornano ad essere attive.

set z "{[set x [set y 6]]}"
puts "z = $z\n"
---
z = {6}

Nel prossimo articolo ripasseremo un po’ di matematica facendo la conoscenza del comando expr.