This repository has been archived on 2023-08-20. You can view files and clone it, but cannot push or open issues or pull requests.
yap-6.3/Logtalk/examples/threads/nondet/SCRIPT.txt
pmoura 42aabce1bb Logtalk 2.30.7 files.
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1973 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
2007-11-06 01:50:09 +00:00

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