Abstract
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.
Similar content being viewed by others
Explore related subjects
Discover the latest articles, news and stories from top researchers in related subjects.References
J. Armstrong, R. Virding and M. Williams, Concurrent Programming in Erlang (Prentice-Hall International, 1993).
M.E. Bratman, D.J. Israel and M.E. Pollack, Plans and resource bounded practical reasoning, Computational Intelligence 4 (1988) 349–355.
L. Cardelli and P. Wegner, On understanding types, data abstraction, and polymorphism, Computing Surveys 17 (1985) 471–522.
N. Carriero and D. Gelernter, Linda in context, Communications of the ACM 32(4) (1989) 444–458.
M. Carro and M. Hermenegildo, Concurrency in prolog using threads and a shared database, in: Proceedings of ICLP99, ed. D.D. Schreye (MIT Press, 1999) pp. 320–334.
D. Chu and K.L. Clark, IC-Prolog II: A multi-threaded Prolog system, in: Proc. of the ICLP'93 Workshop on Concurrent & Parallel Implementations of Logic Programming Systems, eds. G. Succi and G. Colla (1993) pp. 115–141.
K. Clark and F. McCabe, Ontology representation and inference in Go!, Technical Report, www.doc.ic.ac.uk/~klc/ontology.html (2003).
K.L. Clark, P.J. Robinson and R. Hagen, Multi-threading and message communication in Qu-Prolog, Theory and Practice of Logic Programming 1(3) (2001) 283–301.
S. Constantini and A. Tocchio, A logic programming language for multi-agent systems, in: Proc. of JELIA02-8th European Conf. on Logics in AI, Lecture Notes in Artificial Intelligence, Vol. 2424, (Springer, 2002) pp. 1–13.
J. Eskilson and M. Carlsson, SicstusMT-a multithreaded execution environment for SICStus Prolog, in: Principles of Declarative Programming, eds. K.M. Catuscia Palamidessi and H. Glaser, Lecture Notes in Computer Science, Vol. 1490 (Springer, 1998) pp. 36–53.
T. Finin, R. Fritzson, D. McKay and R. McEntire, KQML as an agent communication language, in: Proc. of 3rd International Conference on Information and Knowledge Management (1994).
FIPA, Fipa SL content language specification, Technical Report, Foundation for Intelligent Physical Agents, www.fipa.org (2001).
FIPA, Fipa communicative act library specification, Technical Report, Foundation for Intelligent Physical Agents, www.fipa.org (2002).
M. Fisher, A survey of concurrent MetateM-the language and its applications, in: Temporal Logic, eds. D. Gabbay and H. Ohlbach, Lecture Notes in Artificial Intelligence, Vol. 827 (Springer, 1994) pp. 480–505.
G. D. Giacomo, Y. Lesperance and H. Levesque, Congolog, a concurrent programming language based on the situation calculus, Artificial Intelligence 1-2(121) (2000) 109–169.
M. Hanus, A unified computation model for functional and logic programming, in: Proc. of 24th ACM Symposium on Principles of Programming Languages (POPL'97) (1997) pp. 80–93.
H. Haugeneder and D. Steiner, Co-operative agents: Concepts and applications, in:Agent Technology, eds. N.R. Jennings and M.J. Wooldridge (Springer, 1998) pp. 175–202.
R. Hindley, The principal type scheme of an object in combinatory logic, Trans. AMS 146 (1969) 29–60.
K.V. Hindriks, F.S. de Boer, W. van der Hoek and J.-J.C. Meyer, Formal semantics for an abstract agent programming language, in: Intelligent Agents IV, eds. Singh, A.S. Rao and M. Wooldridge, Lecture Notes in Artificial Intelligence, Springer (1997) pp. 215–230.
D. Kinny, VIP: A visual programming language for plan execution systems, in: Proc. of 1st International Joint Conf. on Autonomous Agents and Multi-Agent Systems (ACM Press, 2002) pp. 721–728.
J. Lloyd, Interaction and concurrency in a declarative programming language, Unpublished report, Department of Computer Science, Bristol University, London (1988).
J. Lloyd, Programming in an integrated functional and logic programming language, Journal of Functional and Logic Programming, (March 1999) 1–49.
F. McCabe, L&O: Logic and Objects (Prentice-Hall International, 1992).
F. McCabe, Go! Reference Manual, Technical Report, Available from author, or http:// sourceforge.net/projects/networkagent/(2003).
F. McCabe and K. Clark, April-Agent PRocess Interaction Language, in: Intelligent Agents, eds. N. Jennings and M. Wooldridge, Lecture Notes in Artificial Intelligence, Vol. 890 (Springer, 1995) pp. 324–340.
D. Miller and G. Nadathur, An overview of ?-prolog, in: Proc. of 5th International Conference and Symposium on Logic Programming, Seattle (1988).
R. Milner, A theory of type polymorphism in programming, Computer and System Sciences 17(3) (1978) 348–375.
M. Minsky, A framework for representing knowledge, in: Psychology of Computer Vision, ed. P.Winston (MIT Press, 1975) pp. 211–277.
A. Omnicini and F. Zambonelli, Coordination for internet application development, Autonomous Agents and Multi-Agent Systems 2(3) (1999) 251–269.
F. Pereira and D.H. Warren, Definite clause grammars compared with augmented transition network, Artificial Intelligence 13(3) (1980) 231–278.
A.S. Rao, AgentSpeak(L): BDI agents speak out in a logical computable language, in: Agents Breaking Away, Lecture Notes in Artificial Intelligence, Vol. 1038 (Springer, 1996) pp. 42–55.
A.S. Rao and M.P. Georgeff, An abstract architecture for rational agents, in: Proceedings of Knowledge Representation and Reasoning (KR&R92) (1992) pp. 349–349.
Y. Shoham, Agent0: An agent-oriented language and its interpreter, in: Proceedings of the National Conference on AI (AAAI-91) (1991) pp. 704–709.
P. Tarau and V. Dahl, Mobile threads through first order continuations, in: Proceedings of APPAIGULP-PRODE'98, Coruna, Spain (1998).
S.R. Thomas, PLACA, an agent oriented programming language, PhD thesis, Department of Computer Science, Stanford University, Stanford (1993).
P. Van Roy and S. Haridi, Mozart: A programming system for agent applications, in: International Workshop on Distributed and Internet Programming with Logic and Constraint Languages, Part of International Conference on Logic Programming (ICLP 99), http://www.mozart-oz.org/ papers/abstracts/diplcl99.html (1999).
T.I. Wang and K.L. Clark, Distributed logic porgramming using mobile agents, in: Proc. of 18th International Conference on Advanced Information Networking and Applications (AINA-2004) (IEEE Press, 2004).
S.N. Willmott, J. Dale, B. Burg, C. Charlton and P. O'Brien, Agentcities: A worldwide open agent network, Agentlink News (8) (November 2001) 13–15.
F.H. Zoltan Somogyi and T. Conway, Mercury: an efficient purely declarative logic programming language, in: Proc. of the Australian Computer Science Conference (1995) pp. 499–512.
Author information
Authors and Affiliations
Rights and permissions
About this article
Cite this article
Clark, K., McCabe, F. Go! — A Multi-Paradigm Programming Language for Implementing Multi-Threaded Agents. Annals of Mathematics and Artificial Intelligence 41, 171–206 (2004). https://doi.org/10.1023/B:AMAI.0000031195.87297.d9
Issue Date:
DOI: https://doi.org/10.1023/B:AMAI.0000031195.87297.d9