add (gen-all []): takes rule and returns all possible sentences from that rule.
add filtering-function optional args to (gen-all)