[comp.lang.prolog] reply to quickie

jtr@expya.UUCP (Jason Trenouth) (04/19/88)

In reply to Ian Dickenson's posed "quickie":

        exactly_one(X, Y) :-
            contains(X, Y),
            p(Y),
            bagof(Y1,
                  (
                    contains(X, Y1),
                    \+(Y1 = Y),		% Assuming N unifications are better
                    q(Y1)		% than one call to "q".
                  ),
                  Ys).

The algorithm computes at worst:

	N calls to "p" (where N is the number of Ys "contain"ed in X); and

	N*(N-1) calls to "q".

By adding a lemma creation predicate (i.e. asserting) for "q" inside
the "bagof" call we could achieve linearity in full calls to "q".

[Anyone else?]

Chow.

	_______________________________________
	|                                     |
	| Jason Trenouth                      |
	|  Computer Science Department        |
	|   University of Exeter              |
	|    Devon EX4 4PT                    |
	|     United Kingdom                  |
	|                                     |
	| JANET:  jtr@uk.ac.exeter.cs         |
	| UUCP:   jtr@expya.uucp              |
	| BITNET: jtr%uk.ac.exeter.cs@ukacrl  |
	|_____________________________________|