/*-------------------------------------------------------------------------*/
/* Prolog to Wam Compiler INRIA Rocquencourt - ChLoE Project */
/* Buit-In Predicates Daniel Diaz - 1994 */
/* */
/* inline bips definitions (for call/1) */
/* */
/* inline.pl */
/*-------------------------------------------------------------------------*/
/* for call/1, inline Built-ins (e.g. =/2) must be defined here */
:- public (=)/2.
X=X.
:- public arg/3, functor/3, (=..)/2.
arg(N,T,A):-
arg(N,T,A).
functor(T,F,N):-
functor(T,F,N).
T1=..T2:-
T1=..T2.
:- public compare/3, (==)/2, (\==)/2, (@<)/2, (@=<)/2, (@>)/2, (@>=)/2.
compare(C,T1,T2):-
compare(C,T1,T2).
X == Y:-
X == Y.
X \== Y:-
X \== Y.
X @< Y:-
X @< Y.
X @=< Y:-
X @=< Y.
X @> Y:-
X @> Y.
X @>= Y:-
X @>= Y.
:- public var/1, nonvar/1, atom/1, integer/1, number/1, atomic/1,
compound/1, callable/1.
var(X):-
var(X).
nonvar(X):-
nonvar(X).
atom(X):-
atom(X).
integer(X):-
integer(X).
number(X):-
number(X).
atomic(X):-
atomic(X).
compound(X):-
compound(X).
callable(X):-
callable(X).
:- public is/2, (=:=)/2, (=\=)/2, (<)/2, (=<)/2, (>)/2, (>=)/2, eval/2.
Var is ExpX:-
eval(ExpX,X),
Var=X.
ExpX =:= ExpY:-
eval(ExpX,X),
eval(ExpY,Y),
X =:= Y.
ExpX =\= ExpY:-
eval(ExpX,X),
eval(ExpY,Y),
X =\= Y.
ExpX < ExpY:-
eval(ExpX,X),
eval(ExpY,Y),
X < Y.
ExpX =< ExpY:-
eval(ExpX,X),
eval(ExpY,Y),
X =< Y.
ExpX > ExpY:-
eval(ExpX,X),
eval(ExpY,Y),
X > Y.
ExpX >= ExpY:-
eval(ExpX,X),
eval(ExpY,Y),
X >= Y.
eval(Exp,V):-
eval1(Exp,V),
!.
eval(Exp,_):-
write('Error: '), write(Exp),
write(' Illegal arithmetic expression'), nl,
fail.
eval1(Exp,_):-
var(Exp),
!,
fail.
eval1(Exp,Exp):-
integer(Exp).
eval1([ExpX],V):-
eval1(ExpX,V).
eval1(+(ExpX),V):-
eval1(ExpX,V).
eval1(-(ExpX),V):-
eval1(ExpX,X),
V is -X.
eval1(ExpX + ExpY,V):-
eval1(ExpX,X),
eval1(ExpY,Y),
V is X + Y.
eval1(ExpX - ExpY,V):-
eval1(ExpX,X),
eval1(ExpY,Y),
V is X - Y.
eval1(ExpX * ExpY,V):-
eval1(ExpX,X),
eval1(ExpY,Y),
V is X * Y.
eval1(ExpX // ExpY,V):-
eval1(ExpX,X),
eval1(ExpY,Y),
V is X // Y.
eval1(ExpX mod ExpY,V):-
eval1(ExpX,X),
eval1(ExpY,Y),
V is X mod Y.
eval1(ExpX /\ ExpY,V):-
eval1(ExpX,X),
eval1(ExpY,Y),
V is X /\ Y.
eval1(ExpX \/ ExpY,V):-
eval1(ExpX,X),
eval1(ExpY,Y),
V is X \/ Y.
eval1(ExpX ^ ExpY,V):-
eval1(ExpX,X),
eval1(ExpY,Y),
V is X ^ Y.
eval1(\(ExpX),V):-
eval1(ExpX,X),
V is \(X).
eval1(ExpX << ExpY,V):-
eval1(ExpX,X),
eval1(ExpY,Y),
V is X << Y.
eval1(ExpX >> ExpY,V):-
eval1(ExpX,X),
eval1(ExpY,Y),
V is X >> Y.
:- public g_assign/2, g_assignb/2, g_link/2, g_read/2, g_array_size/2.
g_assign(Var,Value):-
g_assign(Var,Value).
g_assignb(Var,Value):-
g_assignb(Var,Value).
g_link(Var,Value):-
g_link(Var,Value).
g_read(Var,Value):-
g_read(Var,Value).
g_array_size(Var,Type):-
g_array_size(Var,Type).
syntax highlighted by Code2HTML, v. 0.9.1