By default, all OmniMark rules are active all the time. You can activate and deactivate rules selectively by bundling your rules into groups. You can then selectively activate and deactivate the groups:

  group mary
     find "lamb"
     find "school"
  group tom
     find "piper"
     find "pig"
  group #implied
     using group mary
      submit "Mary had a little lamb"
     using group tom
      submit "Tom, Tom, the piper's son"

In this program, only rules in the group mary are used to process input Mary had a little lamb. Only rules in the group tom are used to process Tom, Tom, the piper's son.

The group mary is activated by the using group prefix on the submit statement. This makes the group mary active for processing the submitted material.

Why the group #implied before the process rule? The process rule is a rule like any other, so it is affected by groups like any other rule. group #implied stands for the default group. (In a program with no groups, all rules are in the default group.) Only the default group is active when a program starts. All other groups are inactive. So, you have to have at least one rule in the default group in order to activate any of the other groups.

Any rule that occurs before the first group statement in your program automatically belongs to the default group, but, if you use groups, it is usually a good idea to place your global rules explicitly into group #implied. If you included a file that contains group statements and you don't explicitly assign your global rules to group #implied, your global rules will fall into the last group declared in the include file rather then the default group. (For this reason, it is a good idea, in any include file that uses groups, to end the file with the declaration group #implied.)

You cannot disable the default group, so rules in the default group are always active. For this reason, you may want to keep the number of rules in the default group to a minimum (but remember, you must have at least one).

Activating multiple groups

You have more than one group active at a time by connecting the group names with &:

  using group mary & tom & dick & harry

You can also add a group to the current set of active groups using #group to represent all active groups:

  using group mary & tom & #group

Groups can also be changed by using a next group is command. The difference between using group and next group is is that the group or groups named in the using group are active for the duration of the specified execution scope, whereas those named in a next group is remain active indefinitely or until the end of a wrapping using group.