Skip to content

lmap

Maps a command over one or more lists, executing a body script for each iteration and collecting results into an accumulator list.

Syntax

tcl
lmap varList list ?varList list ...? command

Parameters

  • varList: Variable name(s) for iteration (must be non-empty)
  • list: List to iterate over
  • command: Body script executed for each iteration

Supported Features

  • Basic single-variable iteration: lmap varname list body - Iterates through a list, assigning each element to a variable
  • Multiple variables per list: lmap {a b} list body - Assigns consecutive list elements to multiple variables per iteration
  • Multiple varlist/list pairs: lmap var1 list1 var2 list2 body - Supports parallel iteration over multiple lists
  • Empty value padding: When a list runs out of elements, remaining variables receive empty strings
  • break statement: Exits the loop early, returning accumulated results so far
  • continue statement: Skips appending the current body result to the accumulator and proceeds to the next iteration
  • Error propagation: Errors in the body script are propagated appropriately
  • return propagation: Return statements in the body are propagated

Examples

Transform each element

Output

Filter and transform

Output

Multiple variables per iteration

Output

Multiple lists

Output

Early exit with break

Output

Implementation Notes

  • The iteration count is calculated as ceiling(listLen / numVars) and uses the maximum across all varlist/list pairs, ensuring all values from all lists are used.
  • When break or continue is invoked, the body does not complete normally and the result is not appended to the accumulator list.
  • Variables are set in the current scope following standard TCL semantics.

See Also

  • foreach - Iterate without collecting results
  • list - Create a list
  • lindex - Get element by index