119 lines
2.4 KiB
C
119 lines
2.4 KiB
C
/*************************************************************************
|
|
* *
|
|
* YAP Prolog %W% %G% *
|
|
* Yap Prolog was developed at NCCUP - Universidade do Porto *
|
|
* *
|
|
* Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-2012 *
|
|
* *
|
|
**************************************************************************
|
|
* *
|
|
* File: YapCompounTerm.h *
|
|
* mods: *
|
|
* comments: main header file for YAP *
|
|
* version: $Id: Yap.h,v 1.38 2008-06-18 10:02:27 vsc Exp $ *
|
|
*************************************************************************/
|
|
|
|
/*************************************************************************************************
|
|
High level macros to access arguments
|
|
*************************************************************************************************/
|
|
|
|
#ifndef YAPCOMPOUNDTERM_H
|
|
|
|
#define YAPCOMPOUNDTERM_H 1
|
|
|
|
#include "inline-only.h"
|
|
|
|
EXTERN Int Yap_unify(Term a,Term b);
|
|
|
|
INLINE_ONLY EXTERN inline Term Deref(Term a);
|
|
|
|
INLINE_ONLY EXTERN inline Term Deref(Term a)
|
|
{
|
|
while(IsVarTerm(a)) {
|
|
Term *b = (Term *) a;
|
|
a = *b;
|
|
if(a==((Term) b)) return a;
|
|
}
|
|
return(a);
|
|
}
|
|
|
|
INLINE_ONLY EXTERN inline Term Derefa(CELL *b);
|
|
|
|
INLINE_ONLY EXTERN inline Term
|
|
Derefa(CELL *b)
|
|
{
|
|
Term a = *b;
|
|
restart:
|
|
if (!IsVarTerm(a)) {
|
|
return(a);
|
|
} else if (a == (CELL)b) {
|
|
return(a);
|
|
} else {
|
|
b = (CELL *)a;
|
|
a = *b;
|
|
goto restart;
|
|
}
|
|
}
|
|
|
|
INLINE_ONLY inline EXTERN Term ArgOfTerm (int i, Term t);
|
|
|
|
INLINE_ONLY inline EXTERN Term
|
|
ArgOfTerm (int i, Term t)
|
|
|
|
{
|
|
return (Term) (Derefa (RepAppl (t) + (i)));
|
|
}
|
|
|
|
|
|
|
|
INLINE_ONLY inline EXTERN Term HeadOfTerm (Term);
|
|
|
|
INLINE_ONLY inline EXTERN Term
|
|
HeadOfTerm (Term t)
|
|
{
|
|
return (Term) (Derefa (RepPair (t)));
|
|
}
|
|
|
|
|
|
|
|
INLINE_ONLY inline EXTERN Term TailOfTerm (Term);
|
|
|
|
INLINE_ONLY inline EXTERN Term
|
|
TailOfTerm (Term t)
|
|
{
|
|
return (Term) (Derefa (RepPair (t) + 1));
|
|
}
|
|
|
|
|
|
|
|
|
|
INLINE_ONLY inline EXTERN Term ArgOfTermCell (int i, Term t);
|
|
|
|
INLINE_ONLY inline EXTERN Term
|
|
ArgOfTermCell (int i, Term t)
|
|
{
|
|
return (Term) ((CELL) (RepAppl (t) + (i)));
|
|
}
|
|
|
|
|
|
|
|
INLINE_ONLY inline EXTERN Term HeadOfTermCell (Term);
|
|
|
|
INLINE_ONLY inline EXTERN Term
|
|
HeadOfTermCell (Term t)
|
|
{
|
|
return (Term) ((CELL) (RepPair (t)));
|
|
}
|
|
|
|
|
|
|
|
INLINE_ONLY inline EXTERN Term TailOfTermCell (Term);
|
|
|
|
INLINE_ONLY inline EXTERN Term
|
|
TailOfTermCell (Term t)
|
|
{
|
|
return (Term) ((CELL) (RepPair (t) + 1));
|
|
}
|
|
|
|
#endif /* YAPCOMPOUNDTERM_H */
|