42aabce1bb
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1973 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
105 lines
1.8 KiB
Plaintext
105 lines
1.8 KiB
Plaintext
================================================================
|
|
Logtalk - Open source object-oriented logic programming language
|
|
Release 2.30.7
|
|
|
|
Copyright (c) 1998-2007 Paulo Moura. All Rights Reserved.
|
|
================================================================
|
|
|
|
|
|
% start by loading the loading the example:
|
|
|
|
| ?- logtalk_load(nondet(loader)).
|
|
...
|
|
|
|
|
|
% make a threaded call with a non-deterministic goal:
|
|
|
|
| ?- threaded_call(lists::member(X, [1,2,3])).
|
|
|
|
X = _G189
|
|
yes
|
|
|
|
% retrieve through backtracking all solutions for the non-deterministic goal:
|
|
|
|
| ?- threaded_exit(lists::member(X, [1,2,3])).
|
|
|
|
X = 1 ;
|
|
X = 2 ;
|
|
X = 3 ;
|
|
no
|
|
|
|
|
|
% make a threaded call by commiting to the first solution found:
|
|
|
|
| ?- threaded_once(lists::member(X, [1,2,3])).
|
|
|
|
X = _G189
|
|
yes
|
|
|
|
% retrieve through backtracking the goal solution:
|
|
|
|
| ?- threaded_exit(lists::member(X, [1,2,3])).
|
|
|
|
X = 1 ;
|
|
no
|
|
|
|
|
|
% when two or more variant calls are made...
|
|
|
|
| ?- threaded_call(lists::member(X, [1,2,3])), threaded_call(lists::member(Y, [1,2,3])).
|
|
|
|
X = _G189 Y =_G190
|
|
yes
|
|
|
|
% ...the first threaded_exit/1 call will pick one of them:
|
|
|
|
| ?- threaded_exit(lists::member(X, [1,2,3])).
|
|
|
|
X = 1 ;
|
|
X = 2 ;
|
|
X = 3 ;
|
|
no
|
|
|
|
% ...and a second threaded_exit/1 call will pick the remaining one:
|
|
|
|
| ?- threaded_exit(lists::member(X, [1,2,3])).
|
|
|
|
X = 1 ;
|
|
X = 2 ;
|
|
X = 3 ;
|
|
no
|
|
|
|
|
|
% tags may be used to distinguish between threaded calls if needed:
|
|
|
|
| ?- threaded_call(lists::member(X, [1,2,3]), Tag).
|
|
|
|
Tag = 1
|
|
yes
|
|
|
|
| ?- threaded_call(lists::member(X, [1,2,3]), Tag).
|
|
|
|
Tag = 2
|
|
yes
|
|
|
|
| ?- threaded_exit(lists::member(X, [1,2,3]), 2).
|
|
|
|
X = 1 ;
|
|
X = 2 ;
|
|
X = 3 ;
|
|
no
|
|
|
|
|
|
% use a subsumed goal instead of a variant of the original goal:
|
|
|
|
| ?- threaded_call(lists::member(X, [1,2,3,2])).
|
|
|
|
X = _G189
|
|
yes
|
|
|
|
| ?- threaded_exit(lists::member(2, [1,2,3,2])).
|
|
|
|
More ;
|
|
More ;
|
|
no
|