Natural Language Performatives
Just a small log of the performatives the game is using and what are the parameters. The document is not complete, since I just fill it up as I need to think about them. I should complete it though...
- perf.callattention(listener)
- perf.greet(listener)
- perf.nicetomeetyou(listener)
- perf.nicetomeetyoutoo(listener)
- perf.q.howareyou(listener)
- perf.farewell(listener)
- perf.thankyou(listener)
- perf.youarewelcome(listener)
- perf.sentiment(listener, sentiment): "sentiment" is a constant with good/bad/surprise
- perf.inform(listener, statement): the speaker states that "statement" is true. The AI will run an inference procedure to see if statement creates a contradiction, and if it does not, it will memorize it.
- perf.inform.parseerror(listener, statement): exactly the same as perf.inform. We just separate it for internal reasons.
- perf.inform.answer(listener, constant): expresses an answer to a question.
- perf.inform.answer(listener, constant, statement): same as above, but adds an additional statement that complements the answer. For example, when saying "yes, I have the key", constant will be 'yes', and statement will encode 'I have the key'.
- perf.inform.answer(listener, variable, constraint): expresses an answer to a question.
- perf.inform.answer(listener, variable, constraint, forall): expresses an answer to a question.
- perf.ack.ok(listener)
- perf.ack.denyrequest(listener)
- perf.ackresponse(listener): this is for things like "me too!"
- perf.ack.unsure(listener, ...): ...
- perf.ack.contradict(listener, ...): ...
- perf.ack.invalidanswer(listener, ...): ...
- perf.request.action(listener, action)
- perf.request.action(listener, action, constraint, number-constraint): like the previous one, but where "action" contains a variable, and inference will be launched to resolve it based on "constraint". The numeric constraint specifies how many of the possible matches by inference should be acted upon. E.g., "take a green block" will have a "number.1", and "switch on all the lights" will have a "all". Other values are possible.
- perf.request.action(listener, action, constraint, number-constraint, forall): The same, but with "forall" variable quantifiers.
- perf.request.stopaction(listener, action)
- perf.request.repeataction(listener)
- perf.request.repeataction(listener, action)
- perf.q.predicate(listener, predicate)
- perf.q.predicate(listener, predicate, additional_sentences): checks if "predicate" is true, assuming "additional_sentences" are true.
- perf.q.predicate(listener, predicate, forall)
- perf.q.predicate(listener, predicate, additional_sentences, forall): checks if "predicate" is true, assuming "additional_sentences" are true.
- perf.q.predicate-negated(...): same as perf.q.predicate, but it will test the negation of the predicate
- perf.q.query(listener, variable, query)
- perf.q.query(listener, variable, query, forall): The same, but with "forall" variable quantifiers.
Most of the following performatives could just be defined as perf.q.query, but it is useful to separate them, as the way in which the text to answer would be generated differs in some cases from a regular query. For example, if you translate "where is the red key?" to a perf.q.query, the answer would be "the kitchen", but as a perf.q.wheris, it will be "in the kitchen".
- perf.q.whereis(listener): this is a follow up to a previous sentence. The AI will try to infer which object are you asking about.
- perf.q.whereis(listener, object):
- perf.q.whereis(listener, location_variable, constraint): the object is inferred from context, and you are just specifying a constraint on where to look for
- perf.q.whereis(listener, object, location_variable, constraint)
- perf.q.whereis(listener, object_variable, location_variable, constraint)
- perf.q.whereto(listener, ...): ...
- perf.q.query-followup(listener, ...): ...
- perf.q.whois.name(listener, ...): ...
- perf.q.whois.noname(listener, ...): ...
- perf.q.whatis.name(listener, ...): ...
- perf.q.whatis.noname(listener, ...): ...
- perf.q.action(listener, action)
- perf.q.action(listener, action, constraint, number-constraint): like the previous one, but where "action" contains a variable, and inference will be launched to resolve it based on "constraint". The numeric constraint specifies how many of the possible matches by inference should be acted upon. E.g., "take a green block" will have a "number.1", and "switch on all the lights" will have a "all". Other values are possible.
- perf.q.howmany(listener, variable, constraint): counts the number of instantiations of "variable" given the constraint.
- perf.q.when(listener, ...): ...
- perf.q.why(listener, ...): ...
- perf.q.how(listener, ...): ...
- perf.q.distance(listener, o1, o2)
: how far is o1 from o2
- perf.q.distance(listener, o1, o2, units)
: how far is o1 from o2 measured in "units"
- perf.moreresults(listener, ...): ...
- perf.rephrase.entity(listener, entity)
- perf.rephrase.entity(listener, variable, constraint)
- perf.rephrase.entity(listener, variable, constraint, forall)
- perf.changemind(listener): this is for things like "I changed my mind", when the player answers yes or no to a question, but wants to change the answer.