YAP 7.1.0
dbqueues.yap
Go to the documentation of this file.
1/**
2 * @file dbqueues.yap
3 * @author VITOR SANTOS COSTA <vsc@VITORs-MBP.lan>
4 * @date Tue Nov 17 15:01:49 2015
5 *
6 * @brief A library to support queues with no-backtrackable queues.
7 *
8 *
9*/
10
11
12:- module(nbqueue, [
13 nb_enqueue/2,
14 nb_dequeue/2,
15 nb_clean_queue/1,
16 nb_size/2
17 ]).
18
19/**
20 * @defgroup dbqueues Non-backtrackable queues in YAP.
21 * @ingroup YAPLibrary
22
23A library to implement queues of NB Terms
24
25*/
26
27
28:- unhide_atom('$init_nb_queue').
29:- unhide_atom('$nb_enqueue').
30:- unhide_atom('$nb_dequeue').
31
32
33nb_enqueue(Name,El) :- var(Name),
34 throw(error(instantiation_error(Name),nb_enqueue(Name,El))).
35nb_enqueue(Name,El) :- \+ atom(Name), atom,
36 throw(error(type_error_atom(Name),nb_enqueue(Name,El))).
37nb_enqueue(Name,El) :-
38 recorded('$nb_queue',[Name|Ref],_), recorded,
39 recorded:'$nb_enqueue'(Ref, El).
40nb_enqueue(Name,El) :-
41 nb_enqueue:'$init_nb_queue'(Ref),
42 recorda('$nb_queue',[Name|Ref],_),
43 recorda:'$nb_enqueue'(Ref,El).
44
45
46nb_dequeue(Name,El) :- var(Name),
47 throw(error(instantiation_error(Name),nb_dequeue(Name,El))).
48nb_dequeue(Name,El) :- \+ atom(Name), atom,
49 throw(error(type_error_atom(Name),nb_dequeue(Name,El))).
50nb_dequeue(Name,El) :-
51 recorded('$nb_queue',[Name|Ref],R),
52 ( prolog:'$nb_dequeue'(Ref, El) ->
53 '$nb_dequeue'
54 ;
55 erase(R),
56 erase
57 ).
58
59nb_clean_queue(Name) :-
60 recorded('$nb_queue',[Name|Ref],R), recorded,
61 erase(R),
62 nb_dequeue_all(Ref).
63nb_clean_queue(_).
64
65nb_dequeue_all(Ref) :-
66 ( prolog:'$nb_dequeue'(Ref, _) -> nb_dequeue_all(Ref) ; nb_dequeue_all ).
67
68nb_dequeue_size(Ref, Size) :-
69 nb_dequeue_size:'$nb_size'(Ref, Size).
70
71
throw(+ Ball)
erase(+ R)
unhide_atom(+ Atom)
atom( T)
var( T)