Project Goals
1) To test and do practical Knowledge Engineering about a virtual realm of objects. (Expertly build rooms with objects based on rules.)
Sometimes its easier to model the world as and how
we see it.
2) Perform higher level operations and model how state
changes happen with our objects
hasAttributes Exercise, Event Exercise
3) To animate non-player character agents from propositional rules
4) Provide a interface for humans to involve themselves
in the lives of logically created agent creatures.
5) To represent episodic models of memory for each agent. (As well as
abducing or creating 'Beliefs')
Room building Exercise to give it a try.
Room building
(The comments ';' are only when debug output is turned on)
[dmiles@Area1002 mud]$ assert (isa DouglasMilesOffice
RoomInAConstruction)
T
[dmiles@Area1002 mud]$ teleport DouglasMilesOffice
you are now in DouglasMilesOffice
[dmiles@DouglasMilesOffice mud]$ look
Nothing apparent about douglas miles office '#$DouglasMilesOffice'
(!)
[dmiles@DouglasMilesOffice mud]$ new Thing as Tool Hammer.
; Asserted
; (thereExists (?X)
; (and
; (isa ?X Hammer)
; (isa ?X Tool)
; (located ?X TwistyPassage45SKFn)))
; Warning
; (genls Hammer Tool) is previously entailed
; Your new default object is 'ToolHammer53455345SKFn'
> set ColorProperty Blue
; Asserted
; (hasAttribute ToolHammer53455345SKFn ColorProperty)
; (attribute ToolHammer53455345SKFn Blue)
> look
You are in a maze of Twisty passages with exits leading in
all directions.
Someone or something has discarded a Blue Hammer here.
> take hammer
; Retracted
; (located ToolHammer53455345SKFn TwistyPassage45SKFn)
; Asserted
; (located ToolHammer53455345SKFn Player8)
Persisted Data Model
At any time we can serialize the 'MOOState' context (Microtheory).
This is meant to be a solid context comprising of instances and sets. The other ontologies about understanding and using these can stored as well as hypothetical rooms and objects. They in could be called 'Exemplars' for example the Unicorn Pegasus is a mythological creature and could live cut off in in the 'Giant Room Of Mythological Creatures' and looks and save like an instance of Unicorn. But Pegasus' room may not be part of the relevant KB and therefore not effecting to the rest of the system. But how would we persist information that does not fit into a 4D space? For example these two rules:
(implies
(and
(isa ?PERSON Human)
(acquaintedWith ?OTHER ?PERSON))
(acquaintances ?PERSON ?OTHER SimpleContactAcquaintance))
(implies
(spouse ?X ?Y)
(friends ?X ?Y))
Each rule is kept in an instance of an Assertion. Physical Regions of the MOO may be effected by any 'Set' of instances from the Assertion Class. Assertions can be divided into Microtheories that can be believed by agents (or Mobs). The MOO reserves no special entity for enforcement of rules unless an agent has been assigned specifically to a room to do so. Most cases agents in the room are picking from there own private array of Assertions which is separate from an entity using the room's set.
----------------------------------------------------------------------------------------------------------------------------------------------------- [the, shopper, drank, the, pepsi] (thereExists ?shopper4675 (and (isa ?shopper4675 (FrequentPerformerFn Shopping ) ) (thereExists ?pepsi6 (and (isa ?pepsi6 PepsiCola ) (and (occursDuring ?drank7550 Past ) (and (isa ?drank7550 DrinkingEvent ) (performedBy ?drank7550 ?shopper4675 ) (consumedObject ?drank7550 ?pepsi6 ) ) ) ) ) ) ) [the, shopper, drinks, the, pepsi] (thereExists ?shopper4675 (and (isa ?shopper4675 (FrequentPerformerFn Shopping ) ) (thereExists ?pepsi6 (and (isa ?pepsi6 PepsiCola ) (and (occursDuring ?drank7550 Now ) (and (isa ?drank7550 DrinkingEvent ) (performedBy ?drank7550 ?shopper4675 ) (consumedObject ?drank7550 ?pepsi6 ) ) ) ) ) ) ) [the, shopper, bought, fries] (thereExists ?shopper4794 (and (isa ?shopper4794 (FrequentPerformerFn Shopping ) ) (and (and (isa ?fries20 Frying ) (objectOfStateChange ?fries20 ?POSSESSOR13610 ) ) (and (occursDuring ?bought3 Past ) (and (isa ?bought3 Buying ) (buyer ?bought3 ?shopper4794 ) (objectPaidFor ?bought3 ?fries20 ) ) ) ) ) ) [the, shopper, bought, fries, with, his, pepsi] (thereExists ?shopper4863 (and (isa ?shopper4863 (FrequentPerformerFn Shopping ) ) (and (isa ?pepsi42 PepsiCola ) (and (and (and (isa ?fries103 Frying ) (objectOfStateChange ?fries103 ?POSSESSOR13613 ) ) (and (isa ?bought4 Buying ) (seller ?bought4 ?shopper4863 ) (objectPaidFor ?bought4 ?fries103 ) (buyingPerformer ?bought4 ?pepsi42 ) ) ) (equals ?POSSESSOR13613 (OneOfFn (PronounFn ThirdPerson-NLAttr Singular-NLAttr Masculine-NLAttr PossessivePronoun-Post ) (PronounFn ThirdPerson-NLAttr Singular-NLAttr Masculine-NLAttr PossessivePronoun-Pre ) ) ) (controls (OneOfFn (PronounFn ThirdPerson-NLAttr Singular-NLAttr Masculine-NLAttr PossessivePronoun-Post ) (PronounFn ThirdPerson-NLAttr Singular-NLAttr Masculine-NLAttr PossessivePronoun-Pre ) ) ?pepsi42 ) ) ) ) ) | english2Kif("I see you"). assert(known_phrase(verbSemTrans(#$and(#$isa(?ACTION1, #$VisualPerception), #$pe rformedBy(?ACTION1, ?Speaker), #$perceivedThings(?ACTION1, ?TargetAgent)), true) )) e2c("George fell last year"). [[txt, 'George'], [tag, staart, nnp, np]] [[txt, fell], [tag, z, vbd]] [[txt, last], [tag, z, jj, ap, 'Adjective', 'Adverb', 'CountNoun', 'WHAdverb']] [[txt, year], [tag, laast, nn, 'CountNoun']] seg([p('VP_non_cyclic', 1, 1), p('VP_non_cyclic', 2, 2), p('PP_non_cyclic', 3, 3), p('VP_non_cyclic', 4, 4)]) (implies (equals ?GEORGE2 (OneOfFn EddieGeorge-FootballPlayer-American (CityNamedFn "George" RepublicOfSouthAfrica ) ) ) (and (isa ?FELL1 Event ) (implies (and (isa ?YEAR5 CalendarYear ) (isa ?YEAR5 ContemporaryArtifact ) ) (or (and (isa ?FELL1 CuttingDownATree ) (objectOfStateChange ?FELL1 ?YEAR5 ) (doneBy ?FELL1 ?GEORGE2 ) ) (and (organismKilled ?FELL1 ?YEAR5 ) (isa ?FELL1 CuttingDownATree ) (performedBy ?FELL1 ?GEORGE2 ) ) ) ) ) ) e2c("I see you"). [[txt, 'I'], [tag, staart, ppss, prp, 'ExpletivePronoun', 'IndefinitePronoun', 'Number-SP', 'ObjectPronoun', 'PossessivePronoun', 'PossessivePronoun-Post', 'Pronoun', 'Pronoun-SubjectOrObject', 'ReciprocalPronoun', 'ReflexivePronoun', 'SubjectPronoun', 'WHPronoun']] [[txt, see], [tag, z, vb]] [[txt, you], [tag, laast, ppss, ppo, prp, 'Determiner', 'Determiner-Central', 'Determiner-ClassA', 'Determiner-ClassB', 'Determiner-ClassC', 'ExpletivePronoun', 'IndefinitePronoun', 'Number-SP', 'ObjectPronoun', 'PossessivePronoun', 'PossessivePronoun-Post', 'Postdeterminer', 'Pronoun', 'Pronoun-SubjectOrObject', 'ReciprocalPronoun', 'ReflexivePronoun', 'SubjectPronoun', 'WHDeterminer', 'WHPronoun']] seg([p('ADVP_non_cyclic', 1, 1), p('VP_non_cyclic', 2, 2), p('ADVP_non_cyclic', 3, 3)]) (thereExists ?SPEAKER (and (isa ?SPEAKER Person ) (and (isa ?SEE1 Event ) (thereExists ?TARGETAGENT (and (isa ?TARGETAGENT Person ) (or (awareOf ?SPEAKER ?TARGETAGENT ) (and (isa ?SEE1 VisualPerception ) (performedBy ?SEE1 ?SPEAKER ) (perceivedThings ?SEE1 ?TARGETAGENT ) ) ) ) ) ) ) ) e2c("I seen the wood"). [[txt, 'I'], [tag, staart, ppss, prp, 'ExpletivePronoun', 'IndefinitePronoun', 'Number-SP', 'ObjectPronoun', 'PossessivePronoun', 'PossessivePronoun-Post', 'Pronoun', 'Pronoun-SubjectOrObject', 'ReciprocalPronoun', 'ReflexivePronoun', 'SubjectPronoun', 'WHPronoun']] [[txt, seen], [tag, z, vbn]] [[txt, a], [tag, z, dt, at, 'Determiner', 'Determiner-Central', 'Determiner-ClassA', 'Determiner-ClassB', 'Determiner-ClassC', 'Determiner-Indefinite', 'Postdeterminer', 'WHDeterminer', 'CountNoun', 'MassNoun', 'MassNoun-Generic']] [[txt, wood], [tag, laast, nn, 'CountNoun', 'MassNoun', 'MassNoun-Generic']] seg([p('ADVP_non_cyclic', 1, 1), p('VP_non_cyclic', 2, 2), p('QP', 3, 4)]) (thereExists ?SPEAKER (and (isa ?SPEAKER Person ) (and (isa ?SEEN1 Event ) (thereExists ?WOOD5 (and (isa ?WOOD5 (OneOfFn Wood Wood-GolfClub WoodedArea ) ) (or (awareOf ?SPEAKER ?WOOD5 ) (and (isa ?SEEN1 VisualPerception ) (performedBy ?SEEN1 ?SPEAKER ) (perceivedThings ?SEEN1 ?WOOD5 ) ) ) ) ) ) ) ) e2c("I sawed the wood"). [[txt, 'I'], [tag, staart, ppss, prp, 'ExpletivePronoun', 'IndefinitePronoun', 'Number-SP', 'ObjectPronoun', 'PossessivePronoun', 'PossessivePronoun-Post', 'Pronoun', 'Pronoun-SubjectOrObject', 'ReciprocalPronoun', 'ReflexivePronoun', 'SubjectPronoun', 'WHPronoun']] [[txt, sawed], [tag, z, 'NLWordForm', 'Verb', 'Adjective']] [[txt, a], [tag, z, dt, at, 'Determiner', 'Determiner-Central', 'Determiner-ClassA', 'Determiner-ClassB', 'Determiner-ClassC', 'Determiner-Indefinite', 'Postdeterminer', 'WHDeterminer', 'CountNoun', 'MassNoun', 'MassNoun-Generic']] [[txt, wood], [tag, laast, nn, 'CountNoun', 'MassNoun', 'MassNoun-Generic']] (thereExists ?SPEAKER (and (isa ?SPEAKER Person ) (and (isa ?SAWED1 Event ) (thereExists ?WOOD11 (and (isa ?WOOD11 (OneOfFn Wood Wood-GolfClub WoodedArea ) ) (and (isa ?SAWED1 SawingSomething ) (objectOfStateChange ?SAWED1 ?WOOD11 ) (doneBy ?SAWED1 ?SPEAKER ) ) ) ) ) ) ) e2c("I see two books on a shelf"). [[txt, 'I'], [tag, staart, ppss, prp, 'ExpletivePronoun', 'IndefinitePronoun', 'Number-SP', 'ObjectPronoun', 'PossessivePronoun', 'PossessivePronoun-Post', 'Pronoun', 'Pronoun-SubjectOrObject', 'ReciprocalPronoun', 'ReflexivePronoun', 'SubjectPronoun', 'WHPronoun']] [[txt, see], [tag, z, vb]] [[txt, two], [tag, z, cd, 'CountNoun', 'Determiner', 'Determiner-Central', 'Determiner-ClassA', 'Determiner-ClassB', 'Determiner-ClassC', 'ExpletivePronoun', 'IndefinitePronoun', 'Number-SP', 'ObjectPronoun', 'PossessivePronoun', 'PossessivePronoun-Post', 'Postdeterminer', 'Pronoun', 'Pronoun-SubjectOrObject', 'ReciprocalPronoun', 'ReflexivePronoun', 'SubjectPronoun', 'WHDeterminer', 'WHPronoun']] [[txt, books], [tag, z, nns, 'CountNoun', 'ProperCountNoun', 'ProperNoun']] [[txt, on], [tag, z, in, 'Adverb', 'Preposition', 'Preposition-Directional-Telic', 'Preposition-Locative', 'VerbParticle', 'WHAdverb']] [[txt, a], [tag, z, dt, at, 'Determiner', 'Determiner-Central', 'Determiner-ClassA', 'Determiner-ClassB', 'Determiner-ClassC', 'Determiner-Indefinite', 'Postdeterminer', 'WHDeterminer', 'CountNoun', 'MassNoun', 'MassNoun-Generic']] [[txt, shelf], [tag, laast, nn, 'CountNoun']] seg([p('ADVP_non_cyclic', 1, 1), p('VP_non_cyclic', 2, 2), p('QP', 3, 4), p('PP_non_cyclic', 5, 5), p('QP', 6, 7)]) (thereExists ?SPEAKER (and (isa ?SPEAKER Person ) (and (isa ?SEE2 Event ) (thereExistExactly 2 ?TWO2 (and (and (isa ?TWO2 BookCopy ) (isa ?TWO2 Thing ) ) (and (or (awareOf ?SPEAKER ?TWO2 ) (and (isa ?SEE2 VisualPerception ) (performedBy ?SEE2 ?SPEAKER ) (perceivedThings ?SEE2 ?TWO2 ) ) ) (thereExists ?SHELF5 (and (isa ?SHELF5 ShelfInABuilding ) (on-UnderspecifiedSurface ?TWO2 ?SHELF5 ) ) ) ) ) ) ) ) ) e2c("I see two books sitting on a shelf"). [[txt, 'I'], [tag, staart, ppss, prp, 'ExpletivePronoun', 'IndefinitePronoun', 'Number-SP', 'ObjectPronoun', 'PossessivePronoun', 'PossessivePronoun-Post', 'Pronoun', 'Pronoun-SubjectOrObject', 'ReciprocalPronoun', 'ReflexivePronoun', 'SubjectPronoun', 'WHPronoun']] [[txt, see], [tag, z, vb]] [[txt, two], [tag, z, cd, 'CountNoun', 'Determiner', 'Determiner-Central', 'Determiner-ClassA', 'Determiner-ClassB', 'Determiner-ClassC', 'ExpletivePronoun', 'IndefinitePronoun', 'Number-SP', 'ObjectPronoun', 'PossessivePronoun', 'PossessivePronoun-Post', 'Postdeterminer', 'Pronoun', 'Pronoun-SubjectOrObject', 'ReciprocalPronoun', 'ReflexivePronoun', 'SubjectPronoun', 'WHDeterminer', 'WHPronoun']] [[txt, books], [tag, z, nns, 'CountNoun', 'ProperCountNoun', 'ProperNoun']] [[txt, sitting], [tag, z, vbg, 'GerundiveCountNoun', 'GerundiveNoun', 'MassNoun-Generic', 'Adjective']] [[txt, on], [tag, z, in, 'Adverb', 'Preposition', 'Preposition-Directional-Telic', 'Preposition-Locative', 'VerbParticle', 'WHAdverb']] [[txt, a], [tag, z, dt, at, 'Determiner', 'Determiner-Central', 'Determiner-ClassA', 'Determiner-ClassB', 'Determiner-ClassC', 'Determiner-Indefinite', 'Postdeterminer', 'WHDeterminer', 'CountNoun', 'MassNoun', 'MassNoun-Generic']] [[txt, shelf], [tag, laast, nn, 'CountNoun']] seg([p('ADVP_non_cyclic', 1, 1), p('VP_non_cyclic', 2, 2), p('QP', 3, 4), p('VP_non_cyclic', 5, 5), p('PP_non_cyclic', 6, 6), p('QP', 7, 8)]) (thereExists ?SPEAKER (and (isa ?SPEAKER Person ) (and (isa ?SEE3 Event ) (thereExistExactly 2 ?TWO4 (and (and (isa ?TWO4 BookCopy ) (isa ?TWO4 SittingDown ) ) (and (or (awareOf ?SPEAKER ?TWO4 ) (and (isa ?SEE3 VisualPerception ) (performedBy ?SEE3 ?SPEAKER ) (perceivedThings ?SEE3 ?TWO4 ) ) ) (thereExists ?SHELF11 (and (isa ?SHELF11 ShelfInABuilding ) (on-UnderspecifiedSurface ?TWO4 ?SHELF11 ) ) ) ) ) ) ) ) ) e2c("I can see you"). [[txt, 'I'], [tag, staart, ppss, prp, 'ExpletivePronoun', 'IndefinitePronoun', 'Number-SP', 'ObjectPronoun', 'PossessivePronoun', 'PossessivePronoun-Post', 'Pronoun', 'Pronoun-SubjectOrObject', 'ReciprocalPronoun', 'ReflexivePronoun', 'SubjectPronoun', 'WHPronoun']] [[txt, can], [tag, z, md, 'Modal', 'CountNoun']] [[txt, see], [tag, z, vb]] [[txt, you], [tag, laast, ppss, ppo, prp, 'Determiner', 'Determiner-Central', 'Determiner-ClassA', 'Determiner-ClassB', 'Determiner-ClassC', 'ExpletivePronoun', 'IndefinitePronoun', 'Number-SP', 'ObjectPronoun', 'PossessivePronoun', 'PossessivePronoun-Post', 'Postdeterminer', 'Pronoun', 'Pronoun-SubjectOrObject', 'ReciprocalPronoun', 'ReflexivePronoun', 'SubjectPronoun', 'WHDeterminer', 'WHPronoun']] seg([p('ADVP_non_cyclic', 1, 1), p('VP_non_cyclic', 2, 2), p('VP_non_cyclic', 3, 3), p('ADVP_non_cyclic', 4, 4)]) (thereExists ?SPEAKER (and (isa ?SPEAKER Person ) (and (behavourCapable ?SPEAKER ?SEE4 ) (and (isa ?SEE4 Event ) (thereExists ?TARGETAGENT (and (isa ?TARGETAGENT Person ) (or (awareOf ?SPEAKER ?TARGETAGENT ) (and (isa ?SEE4 VisualPerception ) (performedBy ?SEE4 ?SPEAKER ) (perceivedThings ?SEE4 ?TARGETAGENT ) ) ) ) ) ) ) ) ) e2c("Fido is a dog"). [[txt, 'Fido'], [tag, staart]] [[txt, is], [tag, z, bez, vbz, 'BeAux']] [[txt, a], [tag, z, dt, at, 'Determiner', 'Determiner-Central', 'Determiner-ClassA', 'Determiner-ClassB', 'Determiner-ClassC', 'Determiner-Indefinite', 'Postdeterminer', 'WHDeterminer', 'CountNoun', 'MassNoun', 'MassNoun-Generic']] [[txt, dog], [tag, laast, nn, 'CountNoun']] (implies (properNameString ?FIDO3 "Fido" ) (thereExists ?DOG8 (and (and (isa ?DOG8 InsultingSomeone ) (subjectOfInfo ?DOG8 :POSSESSOR ) ) (and (isa ?IS1 Living ) (occursDuring ?IS1 Now ) (preActors ?IS1 ?FIDO3 ) (actors ?IS1 ?DOG8 ) ) ) ) ) e2c("Who is the president of the United States of America ?"). [[txt, 'Who'], [tag, staart, nnp, prp, wp, 'ExpletivePronoun', 'IndefinitePronoun', 'Number-SP', 'ObjectPronoun', 'PossessivePronoun', 'PossessivePronoun-Post', 'Pronoun', 'Pronoun-SubjectOrObject', 'ReciprocalPronoun', 'ReflexivePronoun', 'SubjectPronoun', 'WHPronoun']] [[txt, is], [tag, z, bez, vbz, 'BeAux']] [[txt, a], [tag, z, dt, at, 'Determiner', 'Determiner-Central', 'Determiner-ClassA', 'Determiner-ClassB', 'Determiner-ClassC', 'Determiner-Indefinite', 'Postdeterminer', 'WHDeterminer', 'CountNoun', 'MassNoun', 'MassNoun-Generic']] [[txt, president], [tag, z, nn, 'CountNoun', 'ProperCountNoun', 'ProperNoun', 'Adjective']] [[txt, of], [tag, z, in, 'Preposition', 'Preposition-Of']] [[txt, a], [tag, z, dt, at, 'Determiner', 'Determiner-Central', 'Determiner-ClassA', 'Determiner-ClassB', 'Determiner-ClassC', 'Determiner-Indefinite', 'Postdeterminer', 'WHDeterminer', 'CountNoun', 'MassNoun', 'MassNoun-Generic']] [[txt, 'United', 'States', of, 'America'], [tag, z]] [[txt, ?], [tag, laast, ?, 'Punctuation-SP']] (CYC-QUERY (thereExists ?Who (thereExists ?PRESIDENT46 (and (and (and (isa ?PRESIDENT46 Thing ) (isa ?PRESIDENT46 Thing ) ) (isa ?PRESIDENT46 (OneOfFn PresidentOfOrganization (SubcollectionOfWithRelationFromTypeFn Person president Organization ) ) ) ) (and (and (isa ?IS10 Living ) (occursDuring ?IS10 Now ) (preActors ?IS10 ?Who ) (actors ?IS10 ?PRESIDENT46 ) ) (thereExists ?G300312 (and (eq ?G300312 UnitedStatesOfAmerica ) (possessiveRelation ?G300312 ?PRESIDENT46 ) ) ) ) ) ) ) ) e2c("I saw him"). [[txt, 'I'], [tag, staart, ppss, prp, 'ExpletivePronoun', 'IndefinitePronoun', 'Number-SP', 'ObjectPronoun', 'PossessivePronoun', 'PossessivePronoun-Post', 'Pronoun', 'Pronoun-SubjectOrObject', 'ReciprocalPronoun', 'ReflexivePronoun', 'SubjectPronoun', 'WHPronoun']] [[txt, saw], [tag, z, vbd, 'CountNoun']] [[txt, him], [tag, laast, ppo, prp, 'ExpletivePronoun', 'IndefinitePronoun', 'Number-SP', 'ObjectPronoun', 'PossessivePronoun', 'PossessivePronoun-Post', 'Pronoun', 'Pronoun-SubjectOrObject', 'ReciprocalPronoun', 'ReflexivePronoun', 'SubjectPronoun', 'WHPronoun']] seg([p('ADVP_non_cyclic', 1, 1), p('VP_non_cyclic', 2, 2), p('ADVP_non_cyclic', 3, 3)]) (thereExists ?SPEAKER (and (isa ?SPEAKER Person ) (and (isa ?SAW1 Event ) (thereExists ?HIM (and (equals ?HIM (PronounFn ThirdPerson-NLAttr Singular-NLAttr Masculine-NLAttr ObjectPronoun ) ) (or (awareOf ?SPEAKER ?HIM ) (and (isa ?SAW1 SawingSomething ) (objectOfStateChange ?SAW1 ?HIM ) (doneBy ?SAW1 ?SPEAKER ) ) (and (isa ?SAW1 VisualPerception ) (performedBy ?SAW1 ?SPEAKER ) (perceivedThings ?SAW1 ?HIM ) ) ) ) ) ) ) ) e2c("I saw him Monday"). [[txt, 'I'], [tag, staart, ppss, prp, 'ExpletivePronoun', 'IndefinitePronoun', 'Number-SP', 'ObjectPronoun', 'PossessivePronoun', 'PossessivePronoun-Post', 'Pronoun', 'Pronoun-SubjectOrObject', 'ReciprocalPronoun', 'ReflexivePronoun', 'SubjectPronoun', 'WHPronoun']] [[txt, saw], [tag, z, vbd, 'CountNoun']] [[txt, him], [tag, z, ppo, prp, 'ExpletivePronoun', 'IndefinitePronoun', 'Number-SP', 'ObjectPronoun', 'PossessivePronoun', 'PossessivePronoun-Post', 'Pronoun', 'Pronoun-SubjectOrObject', 'ReciprocalPronoun', 'ReflexivePronoun', 'SubjectPronoun', 'WHPronoun']] [[txt, 'Monday'], [tag, laast, nnp, nr, 'CountNoun', 'ProperCountNoun', 'ProperNoun']] seg([p('ADVP_non_cyclic', 1, 1), p('VP_non_cyclic', 2, 2), p('ADVP_non_cyclic', 3, 3), p('VP_non_cyclic', 4, 4)]) (thereExists ?SPEAKER (and (isa ?SPEAKER Person ) (implies (occursDuring ?SAW2 Monday ) (holdsIn ?SAW2 (and (isa ?SAW2 Event ) (thereExists ?HIM (and (equals ?HIM (PronounFn ThirdPerson-NLAttr Singular-NLAttr Masculine-NLAttr ObjectPronoun ) ) (or (awareOf ?SPEAKER ?HIM ) (and (isa ?SAW2 SawingSomething ) (objectOfStateChange ?SAW2 ?HIM ) (doneBy ?SAW2 ?SPEAKER ) ) (and (isa ?SAW2 VisualPerception ) (performedBy ?SAW2 ?SPEAKER ) (perceivedThings ?SAW2 ?HIM ) ) ) ) ) ) ) ) ) ) e2c("I saw him January"). [[txt, 'I'], [tag, staart, ppss, prp, 'ExpletivePronoun', 'IndefinitePronoun', 'Number-SP', 'ObjectPronoun', 'PossessivePronoun', 'PossessivePronoun-Post', 'Pronoun', 'Pronoun-SubjectOrObject', 'ReciprocalPronoun', 'ReflexivePronoun', 'SubjectPronoun', 'WHPronoun']] [[txt, saw], [tag, z, vbd, 'CountNoun']] [[txt, him], [tag, z, ppo, prp, 'ExpletivePronoun', 'IndefinitePronoun', 'Number-SP', 'ObjectPronoun', 'PossessivePronoun', 'PossessivePronoun-Post', 'Pronoun', 'Pronoun-SubjectOrObject', 'ReciprocalPronoun', 'ReflexivePronoun', 'SubjectPronoun', 'WHPronoun']] [[txt, 'January'], [tag, laast, nnp, np, 'ProperCountNoun', 'ProperNoun']] seg([p('ADVP_non_cyclic', 1, 1), p('VP_non_cyclic', 2, 2), p('ADVP_non_cyclic', 3, 3), p('VP_non_cyclic', 4, 4)]) (thereExists ?SPEAKER (and (isa ?SPEAKER Person ) (implies (occursDuring ?SAW3 January ) (holdsIn ?SAW3 (and (isa ?SAW3 Event ) (thereExists ?HIM (and (equals ?HIM (PronounFn ThirdPerson-NLAttr Singular-NLAttr Masculine-NLAttr ObjectPronoun ) ) (or (awareOf ?SPEAKER ?HIM ) (and (isa ?SAW3 SawingSomething ) (objectOfStateChange ?SAW3 ?HIM ) (doneBy ?SAW3 ?SPEAKER ) ) (and (isa ?SAW3 VisualPerception ) (performedBy ?SAW3 ?SPEAKER ) (perceivedThings ?SAW3 ?HIM ) ) ) ) ) ) ) ) ) ) e2c("I saw him January twenty first"). [[txt, 'I'], [tag, staart, ppss, prp, 'ExpletivePronoun', 'IndefinitePronoun', 'Number-SP', 'ObjectPronoun', 'PossessivePronoun', 'PossessivePronoun-Post', 'Pronoun', 'Pronoun-SubjectOrObject', 'ReciprocalPronoun', 'ReflexivePronoun', 'SubjectPronoun', 'WHPronoun']] [[txt, saw], [tag, z, vbd, 'CountNoun']] [[txt, him], [tag, z, ppo, prp, 'ExpletivePronoun', 'IndefinitePronoun', 'Number-SP', 'ObjectPronoun', 'PossessivePronoun', 'PossessivePronoun-Post', 'Pronoun', 'Pronoun-SubjectOrObject', 'ReciprocalPronoun', 'ReflexivePronoun', 'SubjectPronoun', 'WHPronoun']] [[txt, 'January'], [tag, z, nnp, np, 'ProperCountNoun', 'ProperNoun']] [[txt, twenty], [tag, z, cd, 'CountNoun', 'Determiner', 'Determiner-Central', 'Determiner-ClassA', 'Determiner-ClassB', 'Determiner-ClassC', 'ExpletivePronoun', 'IndefinitePronoun', 'Number-SP', 'ObjectPronoun', 'PossessivePronoun', 'PossessivePronoun-Post', 'Postdeterminer', 'Pronoun', 'Pronoun-SubjectOrObject', 'ReciprocalPronoun', 'ReflexivePronoun', 'SubjectPronoun', 'WHDeterminer', 'WHPronoun']] [[txt, first], [tag, laast, jj, od, rb, 'Adjective', 'Adverb', 'CountNoun', 'NongradableAdjective', 'OrdinalAdjective', 'WHAdverb']] seg([p('ADVP_non_cyclic', 1, 1), p('VP_non_cyclic', 2, 2), p('ADVP_non_cyclic', 3, 3), p('VP_non_cyclic', 4, 4), p('QP', 5, 5), p('PP_non_cyclic', 6, 6)]) e2c("Monday ' s concert should be good"). [[txt, 'Monday\'s'], [txt, 'Monday', '\'s'], [txt, 'Monday'], [tag, staart, '\'s', 'nr$']] [[txt, concert], [tag, z, nn, 'CountNoun']] [[txt, should], [tag, z, md, 'Modal']] [[txt, be], [tag, z, be, vb, 'BeAux']] [[txt, good], [tag, laast, jj, 'Adjective']] e2c("We did it in Jan"). [[txt, 'We'], [tag, staart, prp, ppss, 'Determiner', 'Determiner-Central', 'Determiner-ClassA', 'Determiner-ClassB', 'Determiner-ClassC', 'ExpletivePronoun', 'IndefinitePronoun', 'Number-SP', 'ObjectPronoun', 'PossessivePronoun', 'PossessivePronoun-Post', 'Postdeterminer', 'Pronoun', 'Pronoun-SubjectOrObject', 'ReciprocalPronoun', 'ReflexivePronoun', 'SubjectPronoun', 'WHDeterminer', 'WHPronoun']] [[txt, did], [tag, z, dod, vbd, 'DoAux']] [[txt, it], [tag, z, prp, pps, ppo, 'ExpletivePronoun', 'IndefinitePronoun', 'Number-SP', 'ObjectPronoun', 'PossessivePronoun', 'PossessivePronoun-Post', 'Pronoun', 'Pronoun-SubjectOrObject', 'ReciprocalPronoun', 'ReflexivePronoun', 'SubjectPronoun', 'WHPronoun']] [[txt, in], [tag, z, in, 'Adjective', 'Adverb', 'CountNoun', 'Preposition', 'Preposition-Directional-Telic', 'Preposition-Locative', 'VerbParticle', 'WHAdverb']] [[txt, 'Jan'], [tag, laast, nnp, np]] seg([p('ADVP_non_cyclic', 1, 1), p('VP_non_cyclic', 2, 2), p('ADVP_non_cyclic', 3, 3), p('PP_non_cyclic', 4, 4), p('VP_non_cyclic', 5, 5)]) (thereExists ?WE (and (equals ?WE (PronounFn FirstPerson-NLAttr Plural-NLAttr Ungendered-NLAttr SubjectPronoun ) ) (and (and (occursDurring ?IN3 ?G431374 ) (bodilyDoer ?WE ?IN3 ) ) (implies (properNameString ?JAN68 "Jan" ) (and (occursDuring ?IN3 Now ) (holdsIn ?IN3 (in-UnderspecifiedContainer ?WE ?JAN68 ) ) ) ) ) ) ) e2c("Failure to comply may result in dismissal"). [[txt, 'Failure'], [tag, staart, nn, 'CountNoun', 'MassNoun', 'MassNoun-Generic']] [[txt, to], [tag, z, to, in, 'InfinitiveComp', 'Preposition', 'Preposition-Directional']] [[txt, comply], [tag, z, vb, 'Adjective', 'Adverb', 'WHAdverb']] [[txt, may], [tag, z, md, 'Modal', 'ProperCountNoun', 'ProperNoun']] [[txt, result], [tag, z, nn, vb, 'CountNoun']] [[txt, in], [tag, z, in, 'Adjective', 'Adverb', 'CountNoun', 'Preposition', 'Preposition-Directional-Telic', 'Preposition-Locative', 'VerbParticle', 'WHAdverb']] [[txt, dismissal], [tag, laast, nn, 'CountNoun', 'Adjective']] seg([p('VP_non_cyclic', 1, 1), p('PP_non_cyclic', 2, 2), p('VP_non_cyclic', 3, 3), p('VP_non_cyclic', 4, 4), p('VP_non_cyclic', 5, 5), p('PP_non_cyclic', 6, 6), p('VP_non_cyclic', 7, 7)]) (implies (properNameString ?FAILURE3 "Failure" ) (and (and (isa ?RESULT3 (AdverbFn Comply-TheWord ) ) (and (behavourCapable ?FAILURE3 ?RESULT3 ) (implies (and (isa ?DISMISSAL9 (NounFn Dismiss-TheWord ) ) (agentPopularity ?DISMISSAL9 (HighAmountFn PopularityLevel ) ) ) (and (occursDuring ?RESULT3 Now ) (holdsIn ?RESULT3 (eventOutcomes ?FAILURE3 ?DISMISSAL9 ) ) ) ) ) ) (implies (and (isa ?G461366 Thing ) (isa ?G461366 Thing ) ) (to-UnderspecifiedLocation ?FAILURE3 ?G461366 ) ) ) ) e2c("Absence to comply may result in dismissal"). [[txt, 'Absence'], [tag, staart, 'CountNoun', 'CountNoun-Generic', 'NLWordForm', 'Noun']] [[txt, to], [tag, z, to, in, 'InfinitiveComp', 'Preposition', 'Preposition-Directional']] [[txt, comply], [tag, z, vb, 'Adjective', 'Adverb', 'WHAdverb']] [[txt, may], [tag, z, md, 'Modal', 'ProperCountNoun', 'ProperNoun']] [[txt, result], [tag, z, nn, vb, 'CountNoun']] [[txt, in], [tag, z, in, 'Adjective', 'Adverb', 'CountNoun', 'Preposition', 'Preposition-Directional-Telic', 'Preposition-Locative', 'VerbParticle', 'WHAdverb']] [[txt, dismissal], [tag, laast, nn, 'CountNoun', 'Adjective']] (implies (properNameString ?ABSENCE3 "Absence" ) (and (and (isa ?RESULT7 (AdverbFn Comply-TheWord ) ) (and (behavourCapable ?ABSENCE3 ?RESULT7 ) (implies (and (isa ?DISMISSAL18 (NounFn Dismiss-TheWord ) ) (agentPopularity ?DISMISSAL18 (HighAmountFn PopularityLevel ) ) ) (and (occursDuring ?RESULT7 Now ) (holdsIn ?RESULT7 (eventOutcomes ?ABSENCE3 ?DISMISSAL18 ) ) ) ) ) ) (implies (and (isa ?G495123 Thing ) (isa ?G495123 Thing ) ) (to-UnderspecifiedLocation ?ABSENCE3 ?G495123 ) ) ) ) e2c("He made a request that there be an investigation"). [[txt, 'He'], [tag, staart, pps, 'ExpletivePronoun', 'IndefinitePronoun', 'Number-SP', 'ObjectPronoun', 'PossessivePronoun', 'PossessivePronoun-Post', 'Pronoun', 'Pronoun-SubjectOrObject', 'ReciprocalPronoun', 'ReflexivePronoun', 'SubjectPronoun', 'WHPronoun']] [[txt, made], [tag, z, vbd, vbn]] [[txt, a], [tag, z, dt, at, 'Determiner', 'Determiner-Central', 'Determiner-ClassA', 'Determiner-ClassB', 'Determiner-ClassC', 'Determiner-Indefinite', 'Postdeterminer', 'WHDeterminer', 'CountNoun', 'MassNoun', 'MassNoun-Generic']] [[txt, request], [tag, z, nn, 'CountNoun']] [[txt, that], [tag, z, in, cs, dt, wdt, 'Adverb', 'Complementizer', 'Determiner', 'Determiner-Central', 'Determiner-ClassA', 'Determiner-ClassB', 'Determiner-ClassC', 'Determiner-Definite', 'IndefinitePronoun', 'Number-SP', 'ObjectPronoun', 'PossessivePronoun', 'PossessivePronoun-Post', 'Postdeterminer', 'Pronoun', 'Pronoun-SubjectOrObject', 'ReciprocalPronoun', 'ReflexivePronoun', 'SubjectPronoun', 'WHAdverb', 'WHDeterminer', 'WHPronoun']] [[txt, there], [tag, z, ex, rb, 'Adverb', 'AdverbOfPlace', 'ExpletivePronoun', 'IndefinitePronoun', 'Number-SP', 'ObjectPronoun', 'PossessivePronoun', 'PossessivePronoun-Post', 'Pronoun', 'Pronoun-SubjectOrObject', 'ReciprocalPronoun', 'ReflexivePronoun', 'SubjectPronoun', 'There-Existential', 'WHAdverb', 'WHPronoun']] [[txt, be], [tag, z, be, vb, 'BeAux']] [[txt, an], [tag, z, dt, at, 'Determiner', 'Determiner-Central', 'Determiner-ClassA', 'Determiner-ClassB', 'Determiner-ClassC', 'Determiner-Indefinite', 'Postdeterminer', 'WHDeterminer']] [[txt, investigation], [tag, laast, nn, 'CountNoun', 'MassNoun', 'MassNoun-Generic']] (thereExists ?HE (and (isa ?HE Male ) (and (isa ?MADE1 Event ) (thereExists ?REQUEST8 (and (and (isa ?REQUEST8 (OneOfFn InformationRequest-IBT Request Requesting-CommunicationAct ) ) (isa ?REQUEST8 Thing ) ) (and (or (causes-Underspecified ?HE ?REQUEST8 ) (createdBy ?REQUEST8 ?HE ) (doneBy ?REQUEST8 ?HE ) (and (isa ?MADE1 MakingSomething ) (performedBy ?MADE1 ?HE ) (products ?MADE1 ?REQUEST8 ) ) ) (and (isa ?BE29 (AdverbFn There-TheWord ) ) (thereExists ?INVESTIGATION7 (and (isa ?INVESTIGATION7 Research ) (and (isa ?BE29 Living ) (occursDuring ?BE29 Now ) (preActors ?BE29 ?REQUEST8 ) (actors ?BE29 ?INVESTIGATION7 ) ) ) ) ) ) ) ) ) ) )
https://docs.google.com/document/d/1fkOxnmI1LqxadvZuCRS-fGIEweIKyPn6AVGp5Yjse1I/edit
Developer�s Install and Workflow Guide (from https://drive.google.com/?authuser=0#folders/0B0QA19UX0ehlV1ZEaXEzc3hjTWM )
ensure you have push access to https://github.com/TeamSPoon/PrologMUD
ensure you have editor access to https://drive.google.com/?authuser=0#folders/0B0QA19UX0ehlV1ZEaXEzc3hjTWM
(You probably should feel comfortable once doing this before deploying on Team
Server)
git clone https://github.com/TeamSPoon/PrologMUD
Install SWI-prolog development version from.. http://www.swi-prolog.org/download/devel
Install cliopatria server(Annie to write.. .)
Install .. packs and extensions for SWI-Prolog (Annie to write.. .)
Set up links to weblog and cliopatria (Annie to write.. .)
TODO
NPC interface (non networked code)
This is the only actual interface into the mud. Here is a prey.pl client written exclusively using that interface. The npc_toploop.pl works by breathing life into that prey AI. You can see how the prey turns it�s head and uses scoped (limited) access to the world.
Annie is developing a Http interface it might be up and previewable at http://logicmoo.prologmoo.com:(Annie�s port num choice)
DMiles predicts many tools will be easier to operate from Http and may be exclusively accessible from there.
Telnet interface (Complete)
The telnetplayer.pl is another written exclusively around NPC interface: (why you see prolog code sometimes.. the telnet server author did not think time should be invested in generating text) It is just a rewrite of: prey.pl + npc_toploop.pl above!
If you�d like to see the commands available from the (NPC) interface.. Type the �help� command. you should get something that looks like.. https://docs.google.com/document/d/1SjCfYLZdc-Pr1-VgX-PXLVuItROFs5Sv3XK8XFpf8Iw/edit
Since, Telnet is a rather ugly way to connect and MUD actions might overwrite your typing we suggest you use any of http://en.wikipedia.org/wiki/Comparison_of_MUD_clients
DMiles uses MUSHClient from http://www.gammon.com.au/welcome.html
Here is the config file used to connect (This a MUCSClient �world config� )�
(All this fle really does is speciy a telent to: logicmoo.prologmoo.com:4040)
So after you connect you might see:
What can be done here? Find out at Logicmoo Telnet Console
The outlined sections are not quite based on code hierarchy but something that has to do with the types of things a hierarchy could be generated from:
Server core code
Questionable Server core code (only questionable to where in this outline anything belongs.. not whether it should exist)
Movement in 2D/3D spaces
Notion of: players or �worlds�
Object inside of �rooms� and �movement� that players can �possess� things.. The types of things we load and save.
Getting things like �all objects in a room�
The NPC toploop
The help system (shows interface to accessing commands and data types)
Non �game� or �server� specific (reusable between games code server).. perhaps �Worlds� or Server Genre
Commands like �drink� individually or RoboCUP kicking the ball
World library defaults such that General AI Files
World Class hierarchy defining �predator� vs �prey�
General AI Files �predator� vs �prey�, RoboCUP �Forward� or �Goalee�
English Command parsing
Non game specific assets
Genre Overrides and enhances above
Details that races of characters exists such as elf or vulcan
Defines the nuances between Outerspace, Soccer Field or Dungeon so to allow all the commands to still function.
defines bottles exists or magic
Game specific assets �Spock�
Game code
defines the number of dwarfs and clerics in X
define how the web page looks
Game Assets
defines what a dwarf looks like in graphical clients like the web
ls -R (and comment DMIles!)
Virtual disk layout is created from the physical
TODO
Running in SWI-Prolog you may edit it right there in SWI-Prolog development env..
web such as �drink�
Example https://github.com/TeamSPoon/PrologMUD/edit/master/src_incoming/actions/drink.pl
If your server is running a form of https://github.com/TeamSPoon/PrologMUD/blob/master/hg_push_pull.sh
Your local directory will be magically updated and incorporated into it�s
ongoing operations.
the Team Server also integrates your source code w/in 30 seconds of save