This article'suse ofexternal links may not follow Wikipedia's policies or guidelines. Pleaseimprove this article by removingexcessive orinappropriate external links, and converting useful links where appropriate intofootnote references.(December 2021) (Learn how and when to remove this message) |
| POP-11 | |
|---|---|
| Paradigm | Multi-paradigm:structured,reflective,procedural,functional,declarative |
| Family | Lisp: POP |
| Designed by | Robin Popplestone, Steve Hardy, Chris Mellish,Aaron Sloman, John Williams, Robert Duncan, Simon Nichols, John Gibson |
| Developers | University of Sussex Systems Designers Ltd. Integral Solutions Ltd. University of Birmingham |
| First appeared | 1975; 51 years ago (1975) |
| Stable release | 16 / January 2020; 6 years ago (2020-01) |
| Typing discipline | dynamic |
| Implementation language | POP-11 |
| Platform | PDP-11,VAX,SPARC,IA-32,PowerPC,x86-64 |
| OS | Cross-platform:VMS,Unix,Linux,Mac OS X,Windows |
| License | Proprietary (1975–1999) Open-source (1999–present):MIT–XFree86 |
| Website | www |
| Majorimplementations | |
| AlphaPop, Basic Pop, Pop-9X, Poplog, Spice | |
| Influenced by | |
| POP-2 | |
POP-11 is areflective,incrementally compiledprogramming language with many of the features of aninterpreted language. It is the core language of thePoplogprogrammingenvironment developed originally by theUniversity of Sussex, and recently in the School of Computer Science at theUniversity of Birmingham, which hosts the main Poplog website.
POP-11 is an evolution of the languagePOP-2, developed inEdinburgh University, and features an openstack model (likeForth, amongothers). It is mainlyprocedural, but supports declarative language constructs, including a pattern matcher, and is mostly used for research and teaching inartificial intelligence, although it has features sufficient for many other classes of problems. It is often used to introduce symbolic programming techniques to programmers of more conventional languages likePascal, who find POP syntax more familiar than that ofLisp. One of POP-11's features is that it supportsfirst-class functions.
POP-11 is the core language of the Poplog system. The availability of the compiler and compiler subroutines at run-time (a requirement for incremental compiling) gives it the ability to support a far wider range of extensions (including run-time extensions, such as adding new data-types) than would be possible using only amacro facility. This made it possible for (optional) incremental compilers to be added forProlog,Common Lisp andStandard ML, which could be added as required to support either mixed language development or development in the second language without using any POP-11 constructs. This made it possible for Poplog to be used by teachers, researchers, and developers who were interested in only one of the languages. The most successful product developed in POP-11 was the Clementinedata mining system, developed by ISL. After SPSS bought ISL, they renamed Clementine toSPSS Modeler and decided to port it toC++ andJava, and eventually succeeded with great effort, and perhaps some loss of the flexibility provided by the use of an AI language.
POP-11 was for a time available only as part of an expensive commercial package (Poplog), but since about 1999 it has been freely available as part of theopen-source software version of Poplog, including various added packages and teachinglibraries. An online version ofELIZA using POP-11 is available at Birmingham.
At the University of Sussex, David Young used POP-11 in combination withC andFortran to develop a suite of teaching and interactive development tools for image processing and vision, and has made them available in the Popvision extension to Poplog.
Here is an example of a simple POP-11 program:
define Double(Source) -> Result; Source*2 -> Result;enddefine;
Double(123) =>
That prints out:
** 246
This one includes some list processing:
define RemoveElementsMatching(Element, Source) -> Result; lvars Index; [[% for Index in Source do unless Index = Element or Index matches Element then Index; endunless; endfor; %]] -> Result; enddefine; RemoveElementsMatching("the", [[the cat sat on the mat]]) => ;;; outputs [[cat sat on mat]] RemoveElementsMatching("the", [[the cat] [sat on] the mat]) => ;;; outputs [[the cat] [sat on] mat] RemoveElementsMatching([[= cat]], [[the cat]] is a [[big cat]]) => ;;; outputs [[is a]]Examples using the POP-11 pattern matcher, which makes it relatively easy for students to learn to develop sophisticated list-processing programs without having to treat patterns as tree structures accessed by 'head' and 'tail' functions (CAR and CDR in Lisp), can be found in theonline introductory tutorial. The matcher is at the heart ofthe SimAgent (sim_agent) toolkit. Some of the powerful features of the toolkit, such as linking pattern variables to inline code variables, would have been very difficult to implement without the incremental compiler facilities.