![]() |
|
Veronica Dahl, Stephen Rochefort
Logic Programming Group
School of Computing Science
Simon Fraser University
Burnaby, Canada
{veronica, srochefo}@cs.sfu.ca
Tel. +1-604-291-3426
Koen De Bosschere
Vakgroep Elektronica en Informatiesystemen
Universiteit Gent
Gent, Belgium
kdb@elis.rug.ac.be
Tel. +32-9-264-34-06
groupware, coordination languages, agents, distributed logic programming, virtual worlds, Internet applications.
© 1997 Copyright on this material is held by the authors.
MUDs and MOOs (Multi User Domains - Object Oriented) have started with virtual presence and interaction. Their direct descendants, Virtual Worlds, are a strong unifying metaphor for various forms of net-walk, net-chat and Internet-based virtual presence in general. They start where usual HTML shows its limitations: they have state and require some form of virtual presence. "Being there" is the first step towards full virtualization of concrete ontologies, from entertainment and games to schools and businesses. We strongly believe that the next generation of interfaces will converge towards a common interaction metaphor: an avatar represents each participant in a multi-user 3D virtual world, with information exchange which reuses our basic intuitions and instant learnability for free.
However, despite their graphical sophistication, virtual worlds do not allow controlling behavior and object creation through "programming with words". Yet their characteristics favor the use of natural language: each virtual world represents a particular domain of interest, so the command language into which natural language sentences would have to be parsed is formal and straightforward enough while being already relatively close to natural language.
LogiMOO [1] is a BinProlog-based Virtual World for distributed group-work over the Internet and user-crafted virtual places, virtual objects and agents. LogiMOO is implemented on top of a multi-threaded blackboard-based logic programming system featuring high-level Linda-style coordination. At login time, a main interactive shell and background notifier (for messages and events targeted to the user) are created. A frame and VRML enabled Netscape or Internet Explorer (see figure) is used on the client side while a CGI-based BinProlog remote toplevel interacts with a LogiMOO server. Objects in LogiMOO are represented as hyper-links (URLs) towards their owners' home pages where their `native' representation actually resides in various formats (HTML, VRML, GIF, JPEG etc.).

LogiMOO's natural language front end [3] takes a controlled form of English and translates it into LogiMOO kernel predicates which are executed as actions in the virtual environment. Anaphora, (pronominal references), relatives and multisentential input are allowed through an original Assumption Grammar based mechanism [5, 2] which deals with ambiguity during the parsing process using "state-of-the-world" information and hypothetical reasoning.
Compared to other currently known MUD/MOO environments, this interface bridges the gap between those that are graphical based and those that are pattern matching based.
Agent programming in LogiMOO is made easy by the presence of threads and BinProlog's high-level Linda operations [4]. LogiMOO adopts unification for pattern retrieval while using exclusively deterministic operations, unlike most Prolog based Linda systems. For instance, on top of our coordination primitives, live interaction and remote execution are programmed in a few lines as BinProlog's advanced meta-programming facilities allow moving easily from code to its representation as data and back (in OO terminology this is gives the equivalent of serialization of arbitrary objects).
To be able to put together more complex agent scripts we have to see agents as sets of synchronized behaviors each performing a "component" action (this is quite close to the usual way to do event-driven visual programming).
To go beyond simple agent programming and to be able to reuse agent components through inheritance mechanisms, a further step, beyond the Linda coordination protocol is needed which allows distributing the produce/consume and wait/notify negotiation in "code" as well as in the "data".
Our coordination logic will be described informally as set of primitive operations. We have two classes of objects, components and containers.
Every container is also a component (as usual in windowing classes of OO languages). Note that a container is, in general, a dynamic entity, corresponding to a set of terms on a blackboard, matching an object through unification. In particular, a fixed set of components associated to a given key qualifies as a container.
Objects can be either cloneable, unique or empty (the null object). Clonable objects allow arbitrary uses through copying, unique objects are usable only once. Attempts to clone or use an empty object generates an exception.
Components inherit such properties from the containers they belong to, although, as usual, overriding can be used if necessary. A component can be moved from one container to another.
An agent is a set of behaviors describing such operations, as well as the usual code for logical inferences and arithmetics.
Each behavior is usually attached to its own thread, although thread sharing mechanisms can be used on some machines for actual implementations. An agent "located" in a container is called an avatar.
Agents performing actions on objects can either fail, succeed, wait (to succeed) or warn about an error or exception. The exact behavior of an agent in a move(Object,From,To) transaction is negotiated by interaction between its "intentions" and the nature of the container where the object is located, as follows: if "From" is a cloneable container "Object" is copied to "To" if "From" is a unique container "Object" is moved to "To" an agent is free to wait or fail while `From' is empty.
A Java based implementation, using a minimal set of logic programming components (unification, associative search) is on its way. It will be integrated in the existing LogiMOO framework on the server side. It holds promise for smooth cooperation with existing Java class hierarchies as well as various BinProlog based LogiMOO components.
We thank NSERC (grants OGP0107411 and 611024) and FESR of the Universite de Moncton for support. Koen De Bosschere is associate researcher with the Belgian National Fund for Scientific Research.
![]() |
|