This commit was generated by cvs2svn to compensate for changes in r4,
which included commits to RCS files with non-trunk default branches. git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@5 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
67
pl/arrays.yap
Normal file
67
pl/arrays.yap
Normal file
@@ -0,0 +1,67 @@
|
||||
/*************************************************************************
|
||||
* *
|
||||
* YAP Prolog *
|
||||
* *
|
||||
* Yap Prolog was developed at NCCUP - Universidade do Porto *
|
||||
* *
|
||||
* Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997 *
|
||||
* *
|
||||
**************************************************************************
|
||||
* *
|
||||
* File: arrays.yap *
|
||||
* Last rev: *
|
||||
* mods: *
|
||||
* comments: Array Manipulation *
|
||||
* *
|
||||
*************************************************************************/
|
||||
|
||||
%
|
||||
% These are the array built-in predicates. They will only work if
|
||||
% YAP_ARRAYS is defined in Yap.h.m4.
|
||||
%
|
||||
|
||||
array(Size, Obj) :-
|
||||
'$create_array'(Size, Obj).
|
||||
|
||||
|
||||
% arithmetical optimization
|
||||
'$c_arrays'((P:-Q),(NP:-QF)) :- !,
|
||||
'$c_arrays_body'(Q, QI),
|
||||
'$c_arrays_head'(P, NP, QI, QF).
|
||||
'$c_arrays'(P, NP) :-
|
||||
'$c_arrays_fact'(P, NP).
|
||||
|
||||
'$c_arrays_body'(P, P) :-
|
||||
var(P), !.
|
||||
'$c_arrays_body'((P0,Q0), (P,Q)) :- !,
|
||||
'$c_arrays_body'(P0, P),
|
||||
'$c_arrays_body'(Q0, Q).
|
||||
'$c_arrays_body'((P0;Q0), (P;Q)) :- !,
|
||||
'$c_arrays_body'(P0, P),
|
||||
'$c_arrays_body'(Q0, Q).
|
||||
'$c_arrays_body'((P0->Q0), (P->Q)) :- !,
|
||||
'$c_arrays_body'(P0, P),
|
||||
'$c_arrays_body'(Q0, Q).
|
||||
'$c_arrays_body'(P, NP) :- '$c_arrays_lit'(P, NP).
|
||||
|
||||
%
|
||||
% replace references to arrays to references to built-ins.
|
||||
%
|
||||
'$c_arrays_lit'(G, GL) :-
|
||||
'$array_references'(G, NG, VL),
|
||||
'$add_array_entries'(VL, NG, GL).
|
||||
|
||||
'$c_arrays_head'(G, NG, B, NB) :-
|
||||
'$array_references'(G, NG, VL),
|
||||
'$add_array_entries'(VL, B, NB).
|
||||
|
||||
'$c_arrays_fact'(G, NG) :-
|
||||
'$array_references'(G, IG, VL),
|
||||
(VL = [] -> NG = G;
|
||||
NG = (IG :- NB), '$add_array_entries'(VL, true, NB)).
|
||||
|
||||
'$add_array_entries'([], NG, NG).
|
||||
'$add_array_entries'([Head|Tail], G, (Head, NG)) :-
|
||||
'$add_array_entries'(Tail, G, NG).
|
||||
|
||||
|
Reference in New Issue
Block a user