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

  • K.L. Clark
  • F.G. McCabe


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.

agent programming multi-paradigm programming threads 


Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.


  1. [1]
    J. Armstrong, R. Virding and M. Williams, Concurrent Programming in Erlang (Prentice-Hall International, 1993).Google Scholar
  2. [2]
    M.E. Bratman, D.J. Israel and M.E. Pollack, Plans and resource bounded practical reasoning, Computational Intelligence 4 (1988) 349–355.Google Scholar
  3. [3]
    L. Cardelli and P. Wegner, On understanding types, data abstraction, and polymorphism, Computing Surveys 17 (1985) 471–522.Google Scholar
  4. [4]
    N. Carriero and D. Gelernter, Linda in context, Communications of the ACM 32(4) (1989) 444–458.Google Scholar
  5. [5]
    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.Google Scholar
  6. [6]
    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.Google Scholar
  7. [7]
    K. Clark and F. McCabe, Ontology representation and inference in Go!, Technical Report, www.doc.ic.ac.uk/~klc/ontology.html (2003).Google Scholar
  8. [8]
    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.Google Scholar
  9. [9]
    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.Google Scholar
  10. [10]
    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.Google Scholar
  11. [11]
    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).Google Scholar
  12. [12]
    FIPA, Fipa SL content language specification, Technical Report, Foundation for Intelligent Physical Agents, www.fipa.org (2001).Google Scholar
  13. [13]
    FIPA, Fipa communicative act library specification, Technical Report, Foundation for Intelligent Physical Agents, www.fipa.org (2002).Google Scholar
  14. [14]
    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.Google Scholar
  15. [15]
    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.Google Scholar
  16. [16]
    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.Google Scholar
  17. [17]
    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.Google Scholar
  18. [18]
    R. Hindley, The principal type scheme of an object in combinatory logic, Trans. AMS 146 (1969) 29–60.Google Scholar
  19. [19]
    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.Google Scholar
  20. [20]
    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.Google Scholar
  21. [21]
    J. Lloyd, Interaction and concurrency in a declarative programming language, Unpublished report, Department of Computer Science, Bristol University, London (1988).Google Scholar
  22. [22]
    J. Lloyd, Programming in an integrated functional and logic programming language, Journal of Functional and Logic Programming, (March 1999) 1–49.Google Scholar
  23. [23]
    F. McCabe, L&O: Logic and Objects (Prentice-Hall International, 1992).Google Scholar
  24. [24]
    F. McCabe, Go! Reference Manual, Technical Report, Available from author, or http:// sourceforge.net/projects/networkagent/(2003).Google Scholar
  25. [25]
    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.Google Scholar
  26. [26]
    D. Miller and G. Nadathur, An overview of ?-prolog, in: Proc. of 5th International Conference and Symposium on Logic Programming, Seattle (1988).Google Scholar
  27. [27]
    R. Milner, A theory of type polymorphism in programming, Computer and System Sciences 17(3) (1978) 348–375.Google Scholar
  28. [28]
    M. Minsky, A framework for representing knowledge, in: Psychology of Computer Vision, ed. P.Winston (MIT Press, 1975) pp. 211–277.Google Scholar
  29. [29]
    A. Omnicini and F. Zambonelli, Coordination for internet application development, Autonomous Agents and Multi-Agent Systems 2(3) (1999) 251–269.Google Scholar
  30. [30]
    F. Pereira and D.H. Warren, Definite clause grammars compared with augmented transition network, Artificial Intelligence 13(3) (1980) 231–278.Google Scholar
  31. [31]
    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.Google Scholar
  32. [32]
    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.Google Scholar
  33. [33]
    Y. Shoham, Agent0: An agent-oriented language and its interpreter, in: Proceedings of the National Conference on AI (AAAI-91) (1991) pp. 704–709.Google Scholar
  34. [34]
    P. Tarau and V. Dahl, Mobile threads through first order continuations, in: Proceedings of APPAIGULP-PRODE'98, Coruna, Spain (1998).Google Scholar
  35. [35]
    S.R. Thomas, PLACA, an agent oriented programming language, PhD thesis, Department of Computer Science, Stanford University, Stanford (1993).Google Scholar
  36. [36]
    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).Google Scholar
  37. [37]
    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).Google Scholar
  38. [38]
    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.Google Scholar
  39. [39]
    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.Google Scholar

Copyright information

© Kluwer Academic Publishers 2004

Authors and Affiliations

  • K.L. Clark
    • 1
  • F.G. McCabe
    • 2
  1. 1.Department of ComputingImperial CollegeLondonUK
  2. 2.Fujistu Labs of AmericaSunnyvaleUSA

Personalised recommendations