TL;DR version: use --think= rather than --apply= for cwm reasoning

In cwm, --apply=r.n3 will apply the rules in r.n3 to the triples in
the store in one pass and add any newly inferred triples to the store.
The newly inferred triples will not, in general, be available for
reasoning with the rules in r.n3 as they are being added to the store.

--think=r.n3, however, does an --apply and then keeps on running the
rules in multiple passes over the store until no further conclusions
can be drawn.

Unless you know that the new triples generated by a set of rules can
not themselves combine with the rules, you should probably use think.

As an example, look at ex1.ttl in examples/n3/apply_vs_think

ex1.ttl has:

  :Student rdfs:subClassOf :Person .
  :Person rdfs:subClassOf :Mammal .
  :Mammal rdfs:subClassOf :Animal .
  :john a :Student.

Doing cwm ex1.ttl --apply=rdfs-rules.n3 produces the new triples

  :john a :Mammal, :Person, :Student, rdfs:Resource .

whereas  cwm ex1.ttl --think=rdfs-rules.n3 produces 

  :john a :Animal, :Mammal, :Person, :Student, rdfs:Resource .

The relevant N3 rule being used here is 

  {?A rdfs:subClassOf ?B. ?S a ?A} => {?S a ?B}.

In this case, the new type triples being inferred (e.g., :john a
:Person) can combine with other triples in the store and the rule to
yield more triples.  So, --think should be used.
