2 global_trie_statistics/0,
4 show_all_local_tables/0,
9 show_tabled_predicates/0,
15 tabling_statistics/2], []).
17:-
'$do_error'/2
use_system_module(
'$_errors', []).
189 show_tabled_predicates(
Stream).
191show_tabled_predicates
:-
193 show_global_trie(
Stream).
197 show_all_tables(
Stream).
201 show_all_local_tables(
Stream).
203show_all_local_tables
:-
205 global_trie_statistics(
Stream).
215global_trie_statistics
:-
217 tabling_statistics(
Stream).
226tabling_statistics(total_memory,[
BytesInUse,
BytesAllocated])
:-
227 '$c_get_optyap_statistics'(
0,
BytesInUse,
BytesAllocated).
228tabling_statistics(table_entries,[
BytesInUse,
StructsInUse])
:-
229 '$c_get_optyap_statistics'(
1,
BytesInUse,
StructsInUse).
230tabling_statistics(subgoal_frames,[
BytesInUse,
StructsInUse])
:-
231 '$c_get_optyap_statistics'(
2,
BytesInUse,
StructsInUse).
232tabling_statistics(dependency_frames,[
BytesInUse,
StructsInUse])
:-
233 '$c_get_optyap_statistics'(
3,
BytesInUse,
StructsInUse).
234tabling_statistics(subgoal_trie_nodes,[
BytesInUse,
StructsInUse])
:-
235 '$c_get_optyap_statistics'(
6,
BytesInUse,
StructsInUse).
236tabling_statistics(answer_trie_nodes,[
BytesInUse,
StructsInUse])
:-
237 '$c_get_optyap_statistics'(
7,
BytesInUse,
StructsInUse).
238tabling_statistics(subgoal_trie_hashes,[
BytesInUse,
StructsInUse])
:-
239 '$c_get_optyap_statistics'(
8,
BytesInUse,
StructsInUse).
240tabling_statistics(answer_trie_hashes,[
BytesInUse,
StructsInUse])
:-
241 '$c_get_optyap_statistics'(
9,
BytesInUse,
StructsInUse).
242tabling_statistics(global_trie_nodes,[
BytesInUse,
StructsInUse])
:-
243 '$c_get_optyap_statistics'(
10,
BytesInUse,
StructsInUse).
244tabling_statistics(global_trie_hashes,[
BytesInUse,
StructsInUse])
:-
245 '$c_get_optyap_statistics'(
11,
BytesInUse,
StructsInUse).
246tabling_statistics(subgoal_entries,[
BytesInUse,
StructsInUse])
:-
247 '$c_get_optyap_statistics'(
16,
BytesInUse,
StructsInUse).
248tabling_statistics(answer_ref_nodes,[
BytesInUse,
StructsInUse])
:-
249 '$c_get_optyap_statistics'(
17,
BytesInUse,
StructsInUse).
258 '$current_module'(
Mod),
259 '$do_table'(
Mod,
Pred).
261'$do_table'(
Mod,
Pred)
:-
263 '$do_error'(instantiation_error,
table(
Mod:Pred)).
264'$do_table'(
_,
Mod:Pred)
:- '$do_table',
265 '$do_table'(
Mod,
Pred).
266'$do_table'(
_,[])
:- '$do_table'.
267'$do_table'(
Mod,[
HPred|TPred])
:- '$do_table',
268 '$do_table'(
Mod,
HPred),
269 '$do_table'(
Mod,
TPred).
270'$do_table'(
Mod,(
Pred1,
Pred2))
:- '$do_table',
271 '$do_table'(
Mod,
Pred1),
272 '$do_table'(
Mod,
Pred2).
273'$do_table'(
Mod,
PredName/PredArity)
:-
276 functor(
PredFunctor,
PredName,
PredArity),
functor,
277 '$set_table'(
Mod,
PredFunctor,[]).
278'$do_table'(
Mod,
PredDeclaration)
:-
279 PredDeclaration=..[
PredName|PredList],
280 '$transl_to_mode_list'(
PredList,
PredModeList,
PredArity),
281 functor(
PredFunctor,
PredName,
PredArity),
functor,
282 '$set_table'(
Mod,
PredFunctor,
PredModeList).
283'$do_table'(
Mod,
Pred)
:-
284 '$do_pi_error'(type_error(callable,
Pred),
table(
Mod:Pred)).
286'$set_table'(
Mod,
PredFunctor,
_PredModeList)
:-
287 '$undefined'(
'$c_table'(
_,
_,
_),prolog),
'$undefined',
288 functor(
PredFunctor,
PredName,
PredArity),
289 '$do_error'(resource_error(tabling,
Mod:PredName/PredArity),
table(
Mod:PredName/PredArity)).
290'$set_table'(
Mod,
PredFunctor,
PredModeList)
:-
291 '$undefined'(
PredFunctor,
Mod),
'$undefined',
292 '$c_table'(
Mod,
PredFunctor,
PredModeList).
293'$set_table'(
Mod,
PredFunctor,
_PredModeList)
:-
294 '$predicate_flags'(
PredFunctor,
Mod,
Flags,
Flags),
295 Flags /\ 0'$predicate_flags'
=:= 0'$predicate_flags',
'$predicate_flags'.
296'$set_table'(
Mod,
PredFunctor,
PredModeList)
:-
297 '$predicate_flags'(
PredFunctor,
Mod,
Flags,
Flags),
298 Flags /\ 0'$predicate_flags'
=:= 0,
299 '$c_table'(
Mod,
PredFunctor,
PredModeList),
'$c_table'.
300'$set_table'(
Mod,
PredFunctor,
_PredModeList)
:-
301 functor(
PredFunctor,
PredName,
PredArity),
302 '$do_error'(permission_error(modify,
table,
Mod:PredName/PredArity),
table(
Mod:PredName/PredArity)).
304'$transl_to_mode_list'([],[],
0)
:- '$transl_to_mode_list'.
305'$transl_to_mode_list'([
TextualMode|L],[
Mode|ModeList],
Arity)
:-
306 '$transl_to_mode_directed_tabling'(
TextualMode,
Mode),
307 '$transl_to_mode_list'(
L,
ModeList,
ListArity),
308 Arity is ListArity + 1.
311'$transl_to_mode_directed_tabling'(index,
1).
312'$transl_to_mode_directed_tabling'(min,
2).
313'$transl_to_mode_directed_tabling'(max,
3).
314'$transl_to_mode_directed_tabling'(all,
4).
315'$transl_to_mode_directed_tabling'(sum,
5).
316'$transl_to_mode_directed_tabling'(last,
6).
317'$transl_to_mode_directed_tabling'(first,
7).
319'$transl_to_mode_directed_tabling'(+,
1).
320'$transl_to_mode_directed_tabling'(@,
4).
321'$transl_to_mode_directed_tabling'(-,
7).
330 '$current_module'(
Mod),
331 '$do_is_tabled'(
Mod,
Pred).
333'$do_is_tabled'(
Mod,
Pred)
:-
335 '$do_error'(instantiation_error,is_tabled(
Mod:Pred)).
336'$do_is_tabled'(
_,
Mod:Pred)
:- '$do_is_tabled',
337 '$do_is_tabled'(
Mod,
Pred).
338'$do_is_tabled'(
_,[])
:- '$do_is_tabled'.
339'$do_is_tabled'(
Mod,[
HPred|TPred])
:- '$do_is_tabled',
340 '$do_is_tabled'(
Mod,
HPred),
341 '$do_is_tabled'(
Mod,
TPred).
342'$do_is_tabled'(
Mod,(
Pred1,
Pred2))
:- '$do_is_tabled',
343 '$do_is_tabled'(
Mod,
Pred1),
344 '$do_is_tabled'(
Mod,
Pred2).
345'$do_is_tabled'(
Mod,
PredName/PredArity)
:-
348 functor(
PredFunctor,
PredName,
PredArity),
349 '$predicate_flags'(
PredFunctor,
Mod,
Flags,
Flags),
'$predicate_flags',
350 Flags /\ 0'$predicate_flags'
=\= 0.
351'$do_is_tabled'(
Mod,
Pred)
:-
352 '$do_pi_error'(type_error(callable,
Pred),is_tabled(
Mod:Pred)).
361 '$current_module'(
Mod),
362 '$do_tabling_mode'(
Mod,
Pred,
Options).
364'$do_tabling_mode'(
Mod,
Pred,
Options)
:-
366 '$do_error'(instantiation_error,tabling_mode(
Mod:Pred,
Options)).
367'$do_tabling_mode'(
_,
Mod:Pred,
Options)
:- '$do_tabling_mode',
368 '$do_tabling_mode'(
Mod,
Pred,
Options).
369'$do_tabling_mode'(
_,[],
_)
:- '$do_tabling_mode'.
370'$do_tabling_mode'(
Mod,[
HPred|TPred],
Options)
:- '$do_tabling_mode',
371 '$do_tabling_mode'(
Mod,
HPred,
Options),
372 '$do_tabling_mode'(
Mod,
TPred,
Options).
373'$do_tabling_mode'(
Mod,(
Pred1,
Pred2),
Options)
:- '$do_tabling_mode',
374 '$do_tabling_mode'(
Mod,
Pred1,
Options),
375 '$do_tabling_mode'(
Mod,
Pred2,
Options).
376'$do_tabling_mode'(
Mod,
PredName/PredArity,
Options)
:-
379 functor(
PredFunctor,
PredName,
PredArity),
380 '$predicate_flags'(
PredFunctor,
Mod,
Flags,
Flags),
'$predicate_flags',
382 Flags /\ 0x000040
=\= 0, !,
'$set_tabling_mode'(
Mod,
PredFunctor,
Options)
384 '$do_error'(domain_error(
table,
Mod:PredName/PredArity),tabling_mode(
Mod:PredName/PredArity,
Options))
386'$do_tabling_mode'(
Mod,
Pred,
Options)
:-
387 '$do_pi_error'(type_error(callable,
Pred),tabling_mode(
Mod:Pred,
Options)).
389'$set_tabling_mode'(
Mod,
PredFunctor,
Options)
:-
391 '$c_tabling_mode'(
Mod,
PredFunctor,
Options).
392'$set_tabling_mode'(
_,
_,[])
:- '$set_tabling_mode'.
393'$set_tabling_mode'(
Mod,
PredFunctor,[
HOption|TOption])
:- '$set_tabling_mode',
394 '$set_tabling_mode'(
Mod,
PredFunctor,
HOption),
395 '$set_tabling_mode'(
Mod,
PredFunctor,
TOption).
396'$set_tabling_mode'(
Mod,
PredFunctor,(
Option1,
Option2))
:- '$set_tabling_mode',
397 '$set_tabling_mode'(
Mod,
PredFunctor,
Option1),
398 '$set_tabling_mode'(
Mod,
PredFunctor,
Option2).
399'$set_tabling_mode'(
Mod,
PredFunctor,
Option)
:-
400 '$transl_to_pred_flag_tabling_mode'(
Flag,
Option),
'$transl_to_pred_flag_tabling_mode',
401 '$c_tabling_mode'(
Mod,
PredFunctor,
Flag).
402'$set_tabling_mode'(
Mod,
PredFunctor,
Options)
:-
403 functor(
PredFunctor,
PredName,
PredArity),
404 '$do_error'(domain_error(flag_value,tabling_mode
+Options),tabling_mode(
Mod:PredName/PredArity,
Options)).
407'$transl_to_pred_flag_tabling_mode'(
1,batched).
408'$transl_to_pred_flag_tabling_mode'(
2,local).
409'$transl_to_pred_flag_tabling_mode'(
3,exec_answers).
410'$transl_to_pred_flag_tabling_mode'(
4,load_answers).
411'$transl_to_pred_flag_tabling_mode'(
5,local_trie).
412'$transl_to_pred_flag_tabling_mode'(
6,global_trie).
413'$transl_to_pred_flag_tabling_mode'(
7,coinductive).
422 '$current_module'(
Mod),
423 '$do_abolish_table'(
Mod,
Pred).
425'$do_abolish_table'(
Mod,
Pred)
:-
427 '$do_error'(instantiation_error,abolish_table(
Mod:Pred)).
428'$do_abolish_table'(
_,
Mod:Pred)
:- '$do_abolish_table',
429 '$do_abolish_table'(
Mod,
Pred).
430'$do_abolish_table'(
_,[])
:- '$do_abolish_table'.
431'$do_abolish_table'(
Mod,[
HPred|TPred])
:- '$do_abolish_table',
432 '$do_abolish_table'(
Mod,
HPred),
433 '$do_abolish_table'(
Mod,
TPred).
434'$do_abolish_table'(
Mod,(
Pred1,
Pred2))
:- '$do_abolish_table',
435 '$do_abolish_table'(
Mod,
Pred1),
436 '$do_abolish_table'(
Mod,
Pred2).
437'$do_abolish_table'(
Mod,
PredName/PredArity)
:-
440 functor(
PredFunctor,
PredName,
PredArity),
441 '$predicate_flags'(
PredFunctor,
Mod,
Flags,
Flags),
'$predicate_flags',
443 Flags /\ 0x000040
=\= 0, !,
'$c_abolish_table'(
Mod,
PredFunctor)
445 '$do_error'(domain_error(
table,
Mod:PredName/PredArity),abolish_table(
Mod:PredName/PredArity))
447'$do_abolish_table'(
Mod,
Pred)
:-
448 '$do_pi_error'(type_error(callable,
Pred),abolish_table(
Mod:Pred)).
459 show_table(
Stream,
Pred).
461show_table(
Stream,
Pred)
:-
462 '$current_module'(
Mod),
463 '$do_show_table'(
Stream,
Mod,
Pred).
465'$do_show_table'(
_,
Mod,
Pred)
:-
467 '$do_error'(instantiation_error,show_table(
Mod:Pred)).
468'$do_show_table'(
Stream,
_,
Mod:Pred)
:- '$do_show_table',
469 '$do_show_table'(
Stream,
Mod,
Pred).
470'$do_show_table'(
_,
_,[])
:- '$do_show_table'.
471'$do_show_table'(
Stream,
Mod,[
HPred|TPred])
:- '$do_show_table',
472 '$do_show_table'(
Stream,
Mod,
HPred),
473 '$do_show_table'(
Stream,
Mod,
TPred).
474'$do_show_table'(
Stream,
Mod,(
Pred1,
Pred2))
:- '$do_show_table',
475 '$do_show_table'(
Stream,
Mod,
Pred1),
476 '$do_show_table'(
Stream,
Mod,
Pred2).
477'$do_show_table'(
Stream,
Mod,
PredName/PredArity)
:-
480 functor(
PredFunctor,
PredName,
PredArity),
481 '$predicate_flags'(
PredFunctor,
Mod,
Flags,
Flags),
'$predicate_flags',
483 Flags /\ 0x000040
=\= 0, !,
'$c_show_table'(
Stream,
Mod,
PredFunctor)
485 '$do_error'(domain_error(
table,
Mod:PredName/PredArity),show_table(
Mod:PredName/PredArity))
487'$do_show_table'(
_,
Mod,
Pred)
:-
488 '$do_pi_error'(type_error(callable,
Pred),show_table(
Mod:Pred)).
497table_statistics(
Pred)
:-
499 table_statistics(
Stream,
Pred).
501table_statistics(
Stream,
Pred)
:-
502 '$current_module'(
Mod),
503 '$do_table_statistics'(
Stream,
Mod,
Pred).
505'$do_table_statistics'(
_,
Mod,
Pred)
:-
507 '$do_error'(instantiation_error,table_statistics(
Mod:Pred)).
508'$do_table_statistics'(
Stream,
_,
Mod:Pred)
:- '$do_table_statistics',
509 '$do_table_statistics'(
Stream,
Mod,
Pred).
510'$do_table_statistics'(
_,
_,[])
:- '$do_table_statistics'.
511'$do_table_statistics'(
Stream,
Mod,[
HPred|TPred])
:- '$do_table_statistics',
512 '$do_table_statistics'(
Stream,
Mod,
HPred),
513 '$do_table_statistics'(
Stream,
Mod,
TPred).
514'$do_table_statistics'(
Stream,
Mod,(
Pred1,
Pred2))
:- '$do_table_statistics',
515 '$do_table_statistics'(
Stream,
Mod,
Pred1),
516 '$do_table_statistics'(
Stream,
Mod,
Pred2).
517'$do_table_statistics'(
Stream,
Mod,
PredName/PredArity)
:-
520 functor(
PredFunctor,
PredName,
PredArity),
521 '$predicate_flags'(
PredFunctor,
Mod,
Flags,
Flags),
'$predicate_flags',
523 Flags /\ 0x000040
=\= 0, !,
'$c_table_statistics'(
Stream,
Mod,
PredFunctor)
525 '$do_error'(domain_error(
table,
Mod:PredName/PredArity),table_statistics(
Mod:PredName/PredArity))
527'$do_table_statistics'(
_,
Mod,
Pred)
:-
528 '$do_pi_error'(type_error(callable,
Pred),table_statistics(
Mod:Pred)).
535
YapTab extends the Yap Prolog engine to support sequential tabling.