evaluates f applied to each element of expr in turn.


applies f to parts of expr specified by levelspec.


represents an operator form of Scan that can be applied to an expression.

Details and Options

  • Scan[f,expr] discards the results of applying f to the subexpressions in expr. Unlike Map, Scan does not build up a new expression to return.
  • You can use Return to exit from Scan. Return[ret] causes the final value of Scan to be ret. If no explicit return values are specified, the final result from Scan is Null.
  • You can also use Throw to exit from Scan. »
  • Scan is useful in carrying out an operation on parts of expressions where the operation has a "side effect", such as making an assignment.
  • Scan uses standard level specifications:
  • nlevels 1 through n
    Infinitylevels 1 through Infinity
    {n}level n only
    {n1,n2}levels n1 through n2
  • The default value for levelspec in Scan is {1}.
  • A positive level n consists of all parts of expr specified by n indices.
  • A negative level -n consists of all parts of expr with depth n.
  • Level -1 consists of numbers, symbols, and other objects that do not have subparts.
  • Level 0 corresponds to the whole expression.
  • With the option setting Heads->True, Scan includes heads of expressions and their parts. »
  • Scan traverses the parts of expr in a depth-first order, with leaves visited before roots.
  • If expr is an Association object, Scan[f,expr] applies f only to the values in the association.
  • If expr is a SparseArray object, Scan[f,expr] applies f only to the values or subarrays that explicitly appear in expr.
  • Scan[f][expr] is equivalent to Scan[f,expr].


open allclose all

Basic Examples  (6)

Scan elements of an Association:

Scan elements up to the second level:

Scan elements including the 0^(th) level:

Use the operator form of Scan:

Scope  (5)

Level Specifications  (5)

Scan level 1 (default):

Scan down to level 2:

Scan only level 2:

Scan levels 0 through 2:

Scan down to level 3:

Scan all levels, starting at level 1:

Scan also level 0:

Negative levels:

Positive and negative levels can be mixed:

Different heads at each level:

Generalizations & Extensions  (2)

Scan can be used on expressions with any head:

Throw works inside Scan:

Options  (1)

Heads  (1)

By default, heads are not scanned:

Applications  (2)

Make assignments based on data:

Find all leaves in an expression:

Properties & Relations  (3)

Leaves are visited before roots:

Scan does the same as Map, but without returning a result:

Use Sow and Reap to collect results:

Wolfram Research (1988), Scan, Wolfram Language function, (updated 2014).


Wolfram Research (1988), Scan, Wolfram Language function, (updated 2014).


@misc{reference.wolfram_2020_scan, author="Wolfram Research", title="{Scan}", year="2014", howpublished="\url{}", note=[Accessed: 15-January-2021 ]}


@online{reference.wolfram_2020_scan, organization={Wolfram Research}, title={Scan}, year={2014}, url={}, note=[Accessed: 15-January-2021 ]}


Wolfram Language. 1988. "Scan." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2014.


Wolfram Language. (1988). Scan. Wolfram Language & System Documentation Center. Retrieved from