86e4a99d73
handling for C-code, and several fixes to calling foreign code). git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@470 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
88 lines
1.7 KiB
C
88 lines
1.7 KiB
C
/*************************************************************************
|
|
* *
|
|
* YAP Prolog *
|
|
* *
|
|
* Yap Prolog was developed at NCCUP - Universidade do Porto *
|
|
* *
|
|
* Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997 *
|
|
* *
|
|
**************************************************************************
|
|
* *
|
|
* File: other.c *
|
|
* Last rev: Dec/90 *
|
|
* mods: *
|
|
* comments: extra routines *
|
|
* *
|
|
*************************************************************************/
|
|
#ifdef SCCS
|
|
static char SccsId[] = "%W% %G%";
|
|
#endif
|
|
|
|
|
|
#include "Yap.h"
|
|
#include "Yatom.h"
|
|
#include "Heap.h"
|
|
|
|
Term
|
|
MkPairTerm(Term head, Term tail)
|
|
{
|
|
register CELL *p = H;
|
|
|
|
*H++ = (CELL) (head);
|
|
*H++ = (CELL) (tail);
|
|
return (AbsPair(p));
|
|
}
|
|
|
|
|
|
Term
|
|
MkNewPairTerm(void)
|
|
{
|
|
register CELL *p = H;
|
|
|
|
RESET_VARIABLE(H);
|
|
RESET_VARIABLE(H+1);
|
|
H+=2;
|
|
return (AbsPair(p));
|
|
}
|
|
|
|
|
|
Term
|
|
MkApplTerm(Functor f, unsigned int n, register Term *a)
|
|
/* build compound term with functor f and n
|
|
* args a */
|
|
{
|
|
CELL *t = H;
|
|
|
|
if (n == 0)
|
|
return (MkAtomTerm(NameOfFunctor(f)));
|
|
if (f == FunctorList)
|
|
return (MkPairTerm(a[0], a[1]));
|
|
*H++ = (CELL) f;
|
|
while (n--)
|
|
*H++ = (CELL) * a++;
|
|
return (AbsAppl(t));
|
|
}
|
|
|
|
Term
|
|
MkNewApplTerm(Functor f, unsigned int n)
|
|
/* build compound term with functor f and n
|
|
* args a */
|
|
{
|
|
CELL *t = H;
|
|
|
|
if (n == 0)
|
|
return (MkAtomTerm(NameOfFunctor(f)));
|
|
if (f == FunctorList) {
|
|
RESET_VARIABLE(H);
|
|
RESET_VARIABLE(H+1);
|
|
H+=2;
|
|
return (AbsPair(t));
|
|
}
|
|
*H++ = (CELL) f;
|
|
while (n--) {
|
|
RESET_VARIABLE(H);
|
|
H++;
|
|
}
|
|
return (AbsAppl(t));
|
|
}
|