Skip to content

once

Wraps a sequence of plan items that should run only once for its tracking marker.

<once id="initial_greeting">
  <greet/>
</once>

Attribute, children, and placement

Attribute Meaning
id Optional marker name. Reusing the same value shares once-state across blocks.

The child content is a plan sequence and may contain plan items including conditional branches. A once block can appear in a plan or postplan.

Behavior and usage

Tala tracks the marker as a Boolean private belief. If it is already set, the block is skipped; otherwise Tala sets it and executes the child plan. The block can run again after a session restart or if its marker is forgotten with forget / forget_all. Without an id, Tala creates a unique marker. Avoid nesting once blocks because the resulting execution behavior is not defined.

An id lets separate plan and postplan blocks share one run marker:

<plan>
  <once id="initial_greeting">
    <inform><proposition predicate="welcome_message" value="welcome"/></inform>
  </once>
</plan>
<postplan>
  <once id="initial_greeting">
    <inform><proposition predicate="welcome_message" value="follow_up"/></inform>
  </once>
</postplan>