[Date Prev] [Date Next] [Thread Prev] [Thread Next] Date Index Thread Index Search archive:
Date:Mon Apr 29 02:54:28 2000 
Subject:FAQ for comp.lang.pop 
From:Aaron . Sloman . XX 
Volume-ID:1000429.02 

[To reply replace "Aaron.Sloman.XX" with "A.Sloman"]

This file is
    http://www.cs.bham.ac.uk/research/poplog/comp.lang.pop.newsgroup
or
    ftp://ftp.cs.bham.ac.uk/pub/dist/poplog/comp.lang.pop.newsgroup

Subject: The role of this newsgroup [Temporary FAQ]

(Barely)Maintained by Aaron Sloman
Last updated: 29 Apr 2000

See also www.poplog.org

    CONTENTS

 -- INTRODUCTION: WHAT IS COMP.LANG.POP FOR?
 -- WHAT IS THE "POP" FAMILY OF LANGUAGES?
 -- THE MOST SOPHISTICATED VERSION
 -- EXTENDABILITY USING INCREMENTAL COMPILATION
 -- SOME HISTORY
 -- SOME HISTORY
 -- ALPHAPOP ON MAC
 -- BOOK ON POP-11, AND A PRIMER
 -- WHAT DOES POP11 LOOK LIKE?
 -- THE POPLOG VIRTUAL MACHINE AND TWO LEVEL COMPILER
 -- ONLINE INFORMATION
 -- POP-FORUM EMAIL LIST
 -- AVAILABILITY

-- INTRODUCTION: WHAT IS COMP.LANG.POP FOR?

From time to time people post queries to this news group concerning
email (POP3 protocols) because they misinterpret the name of the
group. It has nothing to do with email software, or the Post office
protocol.

People wishing to discuss that sort of thing should post to a news
group that is more directly relevant, e.g.

    comp.mail.misc

or one of the other comp.mail groups. Their questions and answers
are then more likely to be read by people with relevant knowledge
and interests.

The newsgroup comp.lang.pop was set up for discussion of the programming
language Pop-11 and other languages in the pop family (pop2, pop10,
wpop, alphapop) and the other languages in the Poplog system, namely
Prolog, Common Lisp and ML.

There is an associated email list "pop-forum", described below.


-- WHAT IS THE "POP" FAMILY OF LANGUAGES?

The "pop" family of languages, all have an open stack (like Forth),
incremental compilers (like Basic, Prolog, etc.) rich support for list
processing (like Lisp), procedures as first class objects (like Scheme),
and the compiler as a procedure which can be accessed at run time by
users.

They  vary in other details, e.g.:

o the syntax used for function definitions and other things. E.g.

    pop2 used
        function f x y => z; ... end;
        with a generally rather terse syntax

    pop-11 uses
        define f(x,y) -> z; .... enddefine;
        with a more verbose syntax (e.g. multiple closing brackets)

o whether there is support for full lexical scoping or only dynamic
scoping of local variables (like old Lisp systems),

o whether there is an integrated editor (VED, the pop-11 based
programmable editor in poplog is comparable in power to Emacs, but
differs in its style, parly because it was from the beginning aimed at
novice students and secretaries as well as expert users),

o whether there is a built in pattern matcher (e.g. for rule-based
programming and clearer list-processing code),

o whether autoloading and library search lists are supported

o whether there is support for external languages and callbacks, and
    what sort of support. E.g. the latest version supports a rich
    interface to C and the X window system, including automatic
    converters between C and Pop-11 datatypes and support for callbacks
    and structures shared between C and Pop-11 (which therefore must not
    be moved by the garbage collector).

o whether there is an interface to the X window system

o whether there are tools for building incremental compilers,

o whether there is a light-weight process mechanism,

o whether there is support for object oriented programming (as in the
latest version of pop-11 which includes Objectclass, an extension to
Pop-11 similar in power to Lisp's CLOS).

o whether there is support for asynchronous event handling (e.g. mouse
or keyboard events which occur while programs are running).


-- THE MOST SOPHISTICATED VERSION

The most sophisticated version of the pop family is pop-11, developed
since about 1975 at Sussex University (where John Gibson has been its
main architect, though with contributions from many others), and later
extended into the multi-language Poplog system. It includes all the
features listed above (and more!)


-- EXTENDABILITY USING INCREMENTAL COMPILATION

Because Poplog incremental compiler facilities are available in a
suite of pop11 procedures which compile code incrementally to a
powerful general purpose virtual machine, it is not hard to develop new
languages or extensions to old ones. This is how Common Lisp, Prolog and
ML are implemented in Poplog, and many people have implemented various
extensions to Pop-11.

E.g. I have extended Pop-11 with Poprulebase, a sophisticated forward
chaining rule based system for building expert systems, cognitive
models, etc. described in
    ftp://ftp.cs.bham.ac.uk/pub/dist/poplog/prb/help/poprulebase

That in turn is the heart of the sim_agent toolkit for exploring
architectures for interacting intelligent agents, summarised in
    ftp://ftp.cs.bham.ac.uk/pub/dist/poplog/sim/help/sim_agent
        (Overview help file)
    ftp://ftp.cs.bham.ac.uk/pub/dist/poplog/sim/teach/sim_feelings
        (Tutorial introduction)
    The system is still being actively developed. Its philosophy and
    some uses are outlined in
        A Sloman & B Logan, Building cognitively rich agents using the
        Sim_agent toolkit,
        Communications of the Association of Computing Machinery,
        42, 3, pp. 71--77 March, 1999

    An experimental new version (July 1999) is described in
        ftp://ftp.cs.bham.ac.uk/pub/dist/poplog/help/newkit

Other users have at various times used pop-11 (and other Poplog
languages) to develop various systems either for research purposes or
as products or tools used in-house. E.g. I believe the company COGSYS
sells a package based on Pop-11 for developing process control systems.
Pop-11 is also at the heart of the prize-winning Clementine data mining
system marketed world wide by ISL (Integral Solutions Ltd., address
below).


-- COMMERCIAL DISTRIBUTION

Poplog has been sold commercially since around 1983, when it ran on a
VAX under VMS at Sussex University, and supported only pop-11 and
prolog, along with a very simple lisp system. Common Lisp was added a
few years later, followed by Standard ML. It was later ported to many
Unix platforms as well as VMS on DEC Alpha, and linux on a PC. Until
late 1998, it was marketed commercially world wide by ISL. Following the
take-over of ISL by SPSS in December 1998, Poplog has been made
available free of charge, from the Birmingham Poplog FTP directory,
including sources. Later it may become available from mirror sites.
Details are in

    ftp://ftp.cs.bham.ac.uk/pub/dist/poplog/freepoplog.html
or
    http://www.cs.bham.ac.uk/research/poplog/freepoplog.html

I hope this will help revive interest especially in Pop-11, which I
think is far better for teaching AI to novices than Java or Prolog, and
probably more approachable to many (ordinary) people than Lisp, though
lisp has many benefits. See the discussion in:

    http://www.cs.bham.ac.uk/research/poplog/priner/START.html
or
    ftp://ftp.cs.bham.ac.uk/pub/dist/poplog/primer/START.html

Among the free poplogs is a version which runs under windows95/98/NT,
though without the X-based graphical facilities. That has never been
sold separately by ISL though they use it for Clementine on PCs.

Perhaps with the sources available someone will port Poplog's graphical
tools to the Windows environment. (ISL use a commercial package which
emulates X on a PC, but that is out of the question for most users
because of costs.)

-- SOME HISTORY

The first of the Pop family of languages was originally developed in the
late 1960s by Robin Popplestone. After some evolution (and re-naming) it
was used for research in Artificial Intelligence at Edinburgh University
throughout most of the 1970s and beyond, though other languages (e.g.
Prolog, Common Lisp, ML) were favoured by some of the AI research
groups.

I learnt Pop2 there running on an Elliot 4130 computer in 1972-3. Most
of the multi-user operating system was implemented in pop2. (There was a
single heap shared by all users!) A Pop2 manual ("the silver book") was
published by Edinburgh University Press sin 1972 or 1973, but has long
been out of print.

The other Pop languages grew out of pop2, with the usual divergence as
languages evolve, but the only version that has survived as far as I
know is Pop-11 in the Poplog environment.

-- ALPHAPOP ON MAC

Alphapop was a Mac based version of a subset of pop-11 (e.g. not
including lexically scoped variables), developed and sold by Cognitive
Applications in the late 1980s, but has not been updated for the latest
versions of the Mac operating system and used an out of date C compiler.
If they put the sources in the public domain perhaps someone will bring
it up to date.

-- BOOK ON POP-11, AND A PRIMER

There is a book that provides more information about the history of
Pop-11 and Poplog up to the late 1980s, though I don't know whether it
is still in print.

    POP-11 Comes of Age: The Advancement of an AI Programming Language,
    1989, Ed. J.A.D.W. Anderson,
    Ellis Horwood, Chichester

The occasion was the 21st birthday of Popplestone's original language.

My chapter in that book, written when I was at Sussex, can be found in
    http://www.cs.bham.ac.uk/research/poplog/doc/pop11.at.sussex.ps
or
    ftp://ftp.cs.bham.ac.uk/pub/dist/poplog/doc/pop11.at.sussex.ps
(It is hoped to include additional papers on Poplog and Pop-11 there
later on.)

A fairly detailed introduction to a subset of Pop-11 can be found in the
Pop-11 Primer available in various formats (plain text, latex source,
postscript, html) from the Birmingham Poplog ftp directory

    ftp://ftp.cs.bham.ac.uk/pub/dist/poplog/

A browsable version of the primer (with one postscript figure), produced
using LaTex2html is in:

    http://www.cs.bham.ac.uk/research/poplog/primer/START.html
    ftp://ftp.cs.bham.ac.uk/pub/dist/poplog/primer/START.html

The html version can be fetched in a tar file and unpacked for local
use:

    ftp://ftp.cs.bham.ac.uk/pub/dist/poplog/primerhtml.tar.gz
        (The graphical symbols won't work, but they are inessential.)

The most complete specification of the latest version of Pop-11 is
available only in the REF and HELP directories that come with the poplog
system.

There is quite a lot of browsable Pop-11 teaching material in these
directories:

    ftp://ftp.cs.bham.ac.uk/pub/dist/poplog/teach/
    ftp://ftp.cs.bham.ac.uk/pub/dist/poplog/rclib/teach/
    ftp://ftp.cs.bham.ac.uk/pub/dist/poplog/newkit/prb/teach/
    ftp://ftp.cs.bham.ac.uk/pub/dist/poplog/newkit/sim/teach/

Also accessible via
    http://www.cs.bham.ac.uk/research/poplog/teach
    http://www.cs.bham.ac.uk/research/poplog/rclib/teach
    http://www.cs.bham.ac.uk/research/poplog/newkit/prb/teach
    http://www.cs.bham.ac.uk/research/poplog/newkit/sim/teach

There is also a lot at Sussex University and in other places, though not
made accessible externally.


-- WHAT DOES POP11 LOOK LIKE?

Pop-11 is an incrementally compiled language with power comparable
to Common Lisp but with a syntax closer to more conventional
languages.  E.g. here is a typical procedure definition in Pop-11,
for testing whether an item is in a list (equivalent to the built in
pop-11 procedure member):

    define is_in(item, list) -> result;
        ;;; Return true if item is in the list, otherwise false

        lvars thing;
        for thing in list do
            if thing = item then
                true -> result; return();
            endif
        endfor;

        ;;; not found, so
        false -> result;
    enddefine;

    ;;; Test it: the result is left on the stack. Stack contents are
    ;;; printed out using the "=>" operator:
    is_in(3, [2 3 5 8])=>
    ** <true>

    is_in(3, [one two three]) =>
    ** <false>

The same thing can be defined recursively, in a more familiar functional
style as often used in Lisp or Scheme, and without using an output
variable in the header (unused results are left on the "user stack" in
any case).

    define is_in(item, list);
        if null(list) then false
        elseif item = hd(list) then true
        else is_in(item, tl(list))
        endif
    enddefine;

    ;;; Test it:
    is_in("cat", [bat cat dog elephant])=>
    ** <true>

    is_in(3, [one two three])=>
    ** <false>

Compare a Lisp (or Scheme?) equivalent:

    (defun is_in(item list)
        (cond
            ((null list) nil)
            ((eq item (car list)) t)
            (t (is_in item (cdr list)))))

    ; Test it
    (is_in `cat `(bat cat dog elephant))
    T


Pop-11 also has pattern matching built in, support for developing new
incrementally compiled languages, an object oriented subsystem similar
to CLOS, an interface to the X window system, and many other features.

This is how the pattern matcher could be used to define is_in:

    define is_in(item, list) -> result;
        list matches [== ^item == ] -> result;
    enddefine;

Where "==" matches arbitrary segments of a list. The use of a pattern
matcher makes it much easier to develop knowledge-based systems.

Lots more examples of Pop-11 code can be found in the Primer and online
teach files, described above, and in source code libraries in the Poplog
ftp directory:

    ftp://ftp.cs.bham.ac.uk/pub/dist/poplog/

See especially the documentation directories in
    ftp://ftp.cs.bham.ac.uk/pub/dist/poplog/doc/

    The most detailed documentation on Pop-11 (written for experts)
    is in the files in
        ftp://ftp.cs.bham.ac.uk/pub/dist/poplog/doc/popref/

    supplemented by these
        ftp://ftp.cs.bham.ac.uk/pub/dist/poplog/doc/pophelp/

    (Unfortunately, many of the files in the distributed documentation
    directories have special character codes for reading in the VED
    editor. I have produced "stripped" versions in the above
    directories.)

See also the FAQ assembled by Steve Leach:
   http://www.poplog.org/about/faq-list.html
     (Some of the information here is out of date.)


-- THE POPLOG VIRTUAL MACHINE AND TWO LEVEL COMPILER

Poplog is a multi-language Artificial Intelligence development
environment, in which Pop-11 is the core language and Prolog, Common
Lisp, and Standard ML are also supported in any combination.

The implementation of Pop-11 and all the other language is based on
pop-11 tools for developing incremental compilers that can also be used
to implement other languages which will then run wherever Poplog does.

Poplog provides a high level language-independent and machine-
independent virtual machine (the Poplog Virtual Machine) which is rich
enough to support a wide range of languages. There are Pop-11 procedures
for planting instructions for this virtual machine. When the
instructions reach the end of a procedure definition, the high level PVM
instructions are compined in a machine independent fashion to a low
level Poplog Implementation Machine. The instructions at that level are
then compiled incrementally (a procedure at a time) using a machine
dependent "back end" compiler to instructions for the current machine.
This two level incremental compiler is used by all the Poplog languages.

Poplog compiled procedurs are data-structures in the heap and can be
garbage collected, unlike compiled procedures in some other AI
languages.


During system development and porting to a new machine a different back
end is used which produces files of assembler for the target machine
(and other information required during the linking phase).

Because of all this most of the core of the poplog system is implemented
in Pop-11 (in a special dialect with some C-like extensions to provide
more efficient low level mechanism.) Building a new version therefore
always requires access to a running Poplog. The advantage of using
Pop-11 as the main implementation language rather than C or C++ is that
Pop-11 (like Lisp) is a higher level language making system development
much easier and more reliable. Also new features can be developed as
Pop-11 code in libraries available to users, and then after thorough
testing can later be incorporated into the system.

-- ONLINE INFORMATION

For more information on Pop-11 and Poplog, and a collection of AI
teaching material in Pop-11, see the Birmingham ftp poplog directory

    ftp://ftp.cs.bham.ac.uk/pub/dist/poplog/

including the README file, and
    ftp://ftp.cs.bham.ac.uk/pub/dist/poplog/poplog.info.html
or
    http://www.cs.bham.ac.uk/research/poplog/poplog.info.html

Further information is available in:
   http://www.cogs.susx.ac.uk/users/adrianh/poplog.html
   http://www.cogs.susx.ac.uk/users/adrianh/pop11.html
   http://www.cvg.cs.reading.ac.uk/poplog/

Very detailed documentation can be accessed through the doc/
subdirectory mentioned above:

    ftp://ftp.cs.bham.ac.uk/pub/dist/poplog/doc/
    http://www.cs.bham.ac.uk/research/poplog/doc/

-- POP-FORUM EMAIL LIST

There is an email list gatewayed to the comp.lang.pop news group. It is
currently maintained at the University of Birmingham. If you wish to
join the pop-forum email list please send a message to

    majordomo       AT    cs.bham.ac.uk

containing just one line

    subscribe pop-forum

The address from which you send that message will be added to the
pop-forum email list. You can remove it later by sending a message
containing

    unsubscribe pop-forum

If you join, you will automatically receive all messages posted to
comp.lang.pop. Likewise if you send any messags to pop-forum they
will also be posted to the comp.lang.pop newsgroup.


-- AVAILABILITY

Poplog is now available free of charge. Information is available at

    ftp://ftp.cs.bham.ac.uk/pub/dist/poplog/freepoplog.html
or
    http://www.cs.bham.ac.uk/research/poplog/freepoplog.html

Poplog was developed mainly at Sussex University, and was previously
marketed by ISL, who used Pop-11 in their Clementine data-mining system.
ISL were recently bought by SPSS
    SPSS (UK) Ltd.
    1st Floor
    St. Andrew's House
    West Street, Woking
    Surrey GU21 1EB

    Telephone: +44.1483.719200
    Fax: +44.1483.719290
    E-mail: sales@spss.co.uk
    E-mail/training: training@spss.co.uk
    E-mail/Technical support: support@spss.co.uk
    WEB http://www.isl.co.uk
        http://www.spss.com/


There is an online web site devoted to Poplog and Pop-11:

    http://www.poplog.org/

This includes a FAQ which overlaps with this file.

although this news group has nothing to do with Post Office Protocol or
POP3,  as it happens a precursor of pop-11, developed in Edinburgh
University and used for much of their research in AI in the 1970s and
after, was known as POP2.


Aaron
===
Aaron Sloman, ( http://www.cs.bham.ac.uk/~axs/ )
School of Computer Science, The University of Birmingham, B15 2TT, UK
EMAIL A.Sloman AT cs.bham.ac.uk   (ReadATas@please !)
PAPERS: http://www.cs.bham.ac.uk/research/cogaff/
TOOLS: http://www.cs.bham.ac.uk/research/poplog/freepoplog.html