O.K. SOME FACT OR OTHER IS FORGOTTEN.
But query (or rather its helpmate check) is not nearly talkative enough when it finds no matching fact in the database. It is easy enough to make it better.
It would be useful, for instance, to extend match? so that it returns "true when given [?? eats fat] and [Jack Sprat's wife eats fat] - i.e. to allow for a second wildcard, perhaps using a double question mark (??), which matches strings of words of any length. When you have done this, see if you can identify types of circumstance in which the use of this wild-card runs into problems.
Another possibility might be to allow the database facts to include wild cards (just like the queries) so that the query [? likes fat] would be matched by the database fact [John likes ?]. A database list including a ? would not, of course, be semantically equivalent to an English question. Instead, in this context, [John likes ?] would be taken to mean John likes anything. How would you need to alter match? to allow for such a change?