Perl 'Expert' Quiz-of-the-Week #18

Dan Sanderson <[email protected]> Wed, 30 Jun 2004 13:12:00 -0400
Newsgroups gmane.comp.lang.perl.qotw.quiz-of-the-week
Message-ID <[email protected]>
IMPORTANT: Please do not post solutions, hints, or other spoilers
        until at least 60 hours after the date of this message.
        Thanks.

IMPORTANTE: Por favor, no enviéis soluciones, pistas, o cualquier otra
        cosa que pueda echar a perder la resolución del problema hasta
        que hayan pasado por lo menos 60 horas desde el envío de este
        mensaje. Gracias.

IMPORTANT: S'il vous plaît, attendez au minimum 60 heures après la
        date de ce message avant de poster solutions, indices ou autres
        révélations. Merci.

WICHTIG: Bitte schicken Sie keine Lösungen, Tipps oder Hinweise für
        diese Aufgabe vor Ablauf von 60 Stunden nach dem Datum dieser
        Mail. Danke.

BELANGRIJK: Stuur aub geen oplossingen, hints of andere tips in de
        eerste 60 uur na het verzendingstijdstip van dit
        bericht. Waarvoor dank.

VNIMANIE: Pozhalujsta ne shlite reshenija, nameki na reshenija, i
        voobshe lyubye podskazki v techenie po krajnej mere 60 chasov
        ot daty etogo soobshenija.  Spasibo.

Qing3 Zhu4Yi4: Qing3 Ning2 Deng3Dao4 Jie1Dao4 Ben3 Xin4Xi2 Zhi1Hou4 60
        Xiao3Shi2, Zai4 Fa1Biao3 Jie3Da2, Ti2Shi4, Huo4 Qi2Ta1 Hui4
        Xie4Lou4 Da2An4 De5 Jian4Yi4.  Xie4Xie4.

----------------------------------------------------------------

[ When I sent out expert quiz #17, I said

        [ This isn't the quiz that I planned to send today; there are still
          some kinks we have to work out of that one. ]

  This is the quiz I had planned to send out then.  Thanks to Dan
  Sanderson for making all the tweaks I requested.  - MJD ]



You will implement a simple, interactive inference engine that
understands statements about categories, and can answer questions
about what it was told.

The engine should understand statements of the following forms:

   All PLURAL-NOUN are PLURAL-NOUN.
   No PLURAL-NOUN are PLURAL-NOUN.
   Some PLURAL-NOUN are PLURAL-NOUN.
   Some PLURAL-NOUN are not PLURAL-NOUN.

The engine should be able to answer questions of the following forms:

   Are all PLURAL-NOUN PLURAL-NOUN?
   Are no PLURAL-NOUN PLURAL-NOUN?
   Are any PLURAL-NOUN PLURAL-NOUN?
   Are any PLURAL-NOUN not PLURAL-NOUN?
   Describe PLURAL-NOUN.

Here's an example dialog, with user input after the ">" prompts:

   > All mammals are hairy animals.
   OK.
   > All dogs are mammals.
   OK.
   > All beagles are dogs.
   OK.
   > Are all beagles hairy animals?
   Yes, all beagles are hairy animals.
   > All cats are mammals.
   OK.
   > All cats are hairy animals.
   I know.
   > Are all cats dogs?
   I don't know.
   > No cats are dogs.
   OK.
   > Are all cats dogs?
   No, not all cats are dogs.
   > Are no cats dogs?
   Yes, no cats are dogs.
   > All mammals are dogs.
   Sorry, that contradicts what I already know.
   > Some mammals are brown animals.
   OK.
   > Are any mammals dogs?
   Yes, some mammals are dogs.
   > Are any dogs brown animals?
   I don't know.
   > Some dogs are brown animals.
   OK.
   > All brown animals are brown things.
   OK.
   > Are any dogs brown things?
   Yes, some dogs are brown things.
   > Describe dogs.
   All dogs are mammals.
   All dogs are hairy animals.
   No dogs are cats.
   Some dogs are beagles.
   Some dogs are brown animals.
   Some dogs are brown things.
   > Are all goldfish mammals?
   I don't know anything about goldfish.