document DECIDE
[screamer.git] / FAQ
blob6118d1d85118eda94f7a15508d84b0837ba7bb6f
1 Screamer is an extension of Common Lisp that adds support for nondeterministic
2 programming.  Screamer consists of two levels.  The basic nondeterministic
3 level adds support for backtracking and undoable side effects.  On top of this
4 nondeterministic substrate, Screamer provides a comprehensive constraint
5 programming language in which one can formulate and solve mixed systems of
6 numeric and symbolic constraints.  Together, these two levels augment Common
7 Lisp with practically all of the functionality of both Prolog and constraint
8 logic programming languages such as CHiP and CLP(R).  Furthermore, Screamer is
9 fully integrated with Common Lisp. Screamer programs can coexist and
10 interoperate with other extensions to Common Lisp such as CLOS, CLIM and
11 Iterate.
13 In several ways Screamer is more efficient than other implementations of
14 backtracking languages.  First, Screamer code is transformed into Common Lisp
15 which can be compiled by the underlying Common Lisp system.  Many competing
16 implementations of nondeterministic Lisp are interpreters and thus are far
17 less efficient than Screamer.  Second, the backtracking primitives require
18 fairly low overhead in Screamer.  Finally, this overhead to support
19 backtracking is only paid for those portions of the program which use the
20 backtracking primitives.  Deterministic portions of user programs pass through
21 the Screamer-to-Common-Lisp transformation unchanged.  Since in practise, only
22 small portions of typical programs utilize the backtracking primitives,
23 Screamer can produce more efficient code than compilers for languages in which
24 backtracking is more pervasive.
26 Screamer is fairly portable across most Common Lisp implementations.
28 Screamer was written by Jeffrey Mark Siskind and David Allen McAllester, see
29 file LICENSE for licensing information.