[[tags: egg data]]
[[toc:]]
This page is maintained in the package's
[[https://github.com/abarbu/nondeterminism|github repository]].
= Nondeterminism
This is a Chicken Scheme egg which implements nondeterministic
computation. Note that its results are deterministic, there are no
calls to rand(). Originally from Jeff Siskind's QobiScheme.
Examples are available in the ''examples/'' directory.
=== Generation
(a-boolean)
(an-integer-above i)
(an-integer-below i)
(an-integer)
(an-integer-between i j)
(a-member-of list)
(a-subset-of list)
(a-split-of list)
(a-permutation-of list)
(a-partition-of list)
(a-partition-of-size size list)
Generate a number of different kinds of elements.
(either a b)
Select either a or b, everything is built on top of this primitive.
(fail)
Backtrack at this point.
=== Execution
(for-effects . body)
Execute a nondeterministic computation only for its effects not its
result.
(all-values . body)
Execute a nondeterministic computation and produce a list of
all of its possible outputs.
(one-value . body
(local-one-value . body)
Execute a nondeterministic computation, return one output,
and discard the rest of the computation.
(possibly? . body)
Execute a nondeterministic computation and return #f if it always
fails.
(necessarily? . body)
Execute a nondeterministic computation and return #f if it can fail.
=== Side-effects
(unwind-trail)
(unwedge-trail)
Pop the stack once or clear it entirely.
(local-set! obj val)
(local-set-car! x y)
(local-set-cdr! x y)
(local-string-set! s i x)
(local-vector-set! v i x)
Perform operations with side-effects that will be undone when backtracking.
(upon-failure . body)
When backtracking execute ''body'', the above operations are implemented
in terms of this primitive.
=== Low-level features
:*fail?*
(top-level-fail)
(set-fail! f)
Internal
=== License
Copyright 1993-1995 University of Toronto. All rights reserved.
Copyright 1996 Technion. All rights reserved.
Copyright 1996 and 1997 University of Vermont. All rights reserved.
Copyright 1997-2001 NEC Research Institute, Inc. All rights reserved.
Copyright 2002-2012 Purdue University. All rights reserved.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see http://www.gnu.org/licenses.