Go backward to Subgoaling and default productions.
Go up to Encoding a task.

Chunking
--------

When chunking is used, the termination of a subgoal due to the creation of a
result is an opportunity for Soar to learn a new production, called a
{chunk}. For each result generated in the subgoal, a new production will be
created by the architecture. Chapter See Learning in Soar on page 
See Learning in Soar has more details on chunking. In the Blocks World, these
chunks will contain knowledge about the preferences for selecting operators.

Below is a sample chunk (P109) that was learned during the lookahead and used
during the final execution:

IF   the goal is named build-tower, and
     the problem space is named blocks-world, and
     the current state and the desired state have three blocks 
        with one of them in its
        desired position and clear, and
     there is an operator that moves a block into its 
        desired position on top of the first block,
THEN create a best preference for that operator.

This chunk correctly suggests moving the second block (B) into place when the
bottom block (C) is in place.

Once created, the chunk is added to the production memory, and is thenceforth
equal in status to all other productions, i.e., it will fire whenever its
conditions are met. As Soar gains experience in the domain, chunks will be
created.  With enough experience, Soar will have learned enough about the
Blocks World to avoid the need for the evaluation subgoal and the selection
problem space.  This illustrates that Soar is able to learn its own search
control rules when these are not provided by the user.