Go! — A Multi-Paradigm Programming Language for Implementing Multi-Threaded Agents

Go! is a multi-paradigm programming language that is oriented to the needs of programming secure, production quality, agent based applications. It is multi-threaded, strongly typed and higher order (in the functional programming sense). It has relation, function and action procedure definitions. Threads execute action procedures, calling functions and querying relations as need be. Threads in different agents communicate and coordinate using asynchronous messages. Threads within the same agent can also use shared dynamic relations acting as Linda-style tuple stores. In this paper we introduce the essential features of Go!. We then illustrate them by programming a simple multi-agent application comprising hybrid reactive/deliberative agents interacting in a simulated ballroom. The dancer agents negotiate to enter into joint commitments to dance a particular dance (e.g., polka) they both desire. When the dance is announced, they dance together. The agents' reactive and deliberative components are concurrently executing threads which communicate and coordinate using belief, desire and intention memory stores. We believe such a multi-threaded agent architecture represents a powerful and natural style of agent implementation, for which Go! is well suited.

[1]  Dale A. Miller,et al.  AN OVERVIEW OF PROLOG , 1988 .

[2]  Manuel V. Hermenegildo,et al.  Concurrency in Prolog Using Threads and a Shared Database , 1999, ICLP.

[3]  Fergus Henderson,et al.  The Implementation of Mercury, an Efficient Purely Declarative Logic Programming Language , 1994, ILPS Workshop: Implementation Techniques for Logic Programming Languages.

[4]  Timothy W. Finin,et al.  KQML as an agent communication language , 1994, CIKM '94.

[5]  David Kinny ViP: a visual programming language for plan execution systems , 2002, AAMAS '02.

[6]  Tim Finin,et al.  Using KQML as an agent communication language , 1994, CIKM 1994.

[7]  Joe Armstrong,et al.  Concurrent programming in ERLANG , 1993 .

[8]  P. Davidsson,et al.  Mozart : A Programming System for Agent Applications , .

[9]  Franco Zambonelli,et al.  Coordination for Internet Application Development , 1999, Autonomous Agents and Multi-Agent Systems.

[10]  Paul Tarau,et al.  Mobile Threads through First Order Continuations , 1998 .

[11]  Koen V. Hindriks,et al.  Formal Semantics for an Abstract Agent Programming Language , 1997, ATAL.

[12]  Keith L. Clark,et al.  Multi-threading and Message Communication in Qu-Prolog , 2001, Theory Pract. Log. Program..

[13]  Nicholas Carriero,et al.  Linda in context , 1989, CACM.

[14]  Stefania Costantini,et al.  A Logic Programming Language for Multi-agent Systems , 2002, JELIA.

[15]  Patricia Charlton,et al.  Agentcities: A Worldwide Open Agent Network , 2001 .

[16]  Mats Carlsson,et al.  SICStus MT - A Multithreaded Execution Environment for SICStus Prolog , 1998, PLILP/ALP.

[17]  Keith L. Clark,et al.  April - Agent PRocess Interaction Language , 1995, ECAI Workshop on Agent Theories, Architectures, and Languages.

[18]  Anand S. Rao,et al.  An Abstract Architecture for Rational Agents , 1992, KR.

[19]  Yoav Shoham,et al.  AGENT0: A Simple Agent Language and Its Interpreter , 1991, AAAI.

[20]  Michael Fisher,et al.  A Survey of Concurrent METATEM - the Language and its Applications , 1994, ICTL.

[21]  Keith L. Clark,et al.  Distributed logic programming using mobile agents , 2004, 18th International Conference on Advanced Information Networking and Applications, 2004. AINA 2004..

[22]  Francis G. McCabe,et al.  Logic and objects , 1992, Prentice Hall International Series in Computer Science.

[23]  Michael Hanus,et al.  A unified computation model for functional and logic programming , 1997, POPL '97.

[24]  John W. Lloyd,et al.  Programming in an Integrated Functional and Logic Language , 1999, J. Funct. Log. Program..

[25]  R. Hindley The Principal Type-Scheme of an Object in Combinatory Logic , 1969 .

[26]  Marvin Minsky,et al.  A framework for representing knowledge , 1974 .

[27]  David J. Israel,et al.  Plans and resource‐bounded practical reasoning , 1988, Comput. Intell..

[28]  Hector J. Levesque,et al.  ConGolog, a concurrent programming language based on the situation calculus , 2000, Artif. Intell..

[29]  Sarah Rebecca Thomas,et al.  PLACA, an agent oriented programming language , 1993 .

[30]  Robin Milner,et al.  A Theory of Type Polymorphism in Programming , 1978, J. Comput. Syst. Sci..

[31]  A. S. Roa,et al.  AgentSpeak(L): BDI agents speak out in a logical computable language , 1996 .

[32]  Keith L. Clark,et al.  I.C. Prolog II: a Multi-threaded Prolog System , 1993, ICLP Workshop on Concurrent, Distributed & Parallel Implementations of Logic Programming Systems.

[33]  David H. D. Warren,et al.  Definite Clause Grammars for Language Analysis - A Survey of the Formalism and a Comparison with Augmented Transition Networks , 1980, Artif. Intell..

[34]  Luca Cardelli,et al.  On understanding types, data abstraction, and polymorphism , 1985, CSUR.