YAP 7.1.0
YapCompoundTerm.h
1/*************************************************************************
2 * *
3 * YAP Prolog %W% %G% *
4 * Yap Prolog was developed at NCCUP - Universidade do Porto *
5 * *
6 * Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-2012 *
7 * *
8 **************************************************************************
9 * *
10 * File: YapCompounTerm.h *
11 * mods: *
12 * comments: main header file for YAP *
13 * version: $Id: Yap.h,v 1.38 2008-06-18 10:02:27 vsc Exp $ *
14 *************************************************************************/
15
16/*************************************************************************************************
17 High level macros to access arguments
18*************************************************************************************************/
19
20#ifndef YAPCOMPOUNDTERM_H
21
22#define YAPCOMPOUNDTERM_H 1
23
24#include "inline-only.h"
25
26EXTERN bool Yap_unify(Term a, Term b);
27
28INLINE_ONLY Term Deref(Term a);
29
30INLINE_ONLY Term Deref(Term a) {
31 while (IsVarTerm(a)) {
32 Term *b = (Term *)a;
33
34
35 a = *b;
36 if (a == ((Term)b))
37 return a;
38 }
39 return (a);
40}
41
42INLINE_ONLY CELL *GetTermAdress(Term a);
43
44
45INLINE_ONLY Term Derefa(CELL *b) {
46 Term a = *b;
47restart:
48 if (!IsVarTerm(a)) {
49 return (a);
50 } else if (a == (CELL)b) {
51 return (a);
52 } else {
53 b = (CELL *)a;
54 a = *b;
55 goto restart;
56 }
57}
58
59INLINE_ONLY Term ArgOfTerm(int i, Term t);
60
61INLINE_ONLY Term ArgOfTerm(int i, Term t)
62
63{
64 return (Term)(Derefa(RepAppl(t) + (i)));
65}
66
67INLINE_ONLY Term HeadOfTerm(Term);
68
69INLINE_ONLY Term HeadOfTerm(Term t) {
70 return (Term)(Derefa(RepPair(t)));
71}
72
73INLINE_ONLY Term TailOfTerm(Term);
74
75INLINE_ONLY Term TailOfTerm(Term t) {
76 return (Term)(Derefa(RepPair(t) + 1));
77}
78
79INLINE_ONLY Term ArgOfTermCell(int i, Term t);
80
81INLINE_ONLY Term ArgOfTermCell(int i, Term t) {
82 return (Term)((CELL)(RepAppl(t) + (i)));
83}
84
85INLINE_ONLY Term HeadOfTermCell(Term);
86
87INLINE_ONLY Term HeadOfTermCell(Term t) {
88 return (Term)((CELL)(RepPair(t)));
89}
90
91INLINE_ONLY Term TailOfTermCell(Term);
92
93INLINE_ONLY Term TailOfTermCell(Term t) {
94 return (Term)((CELL)(RepPair(t) + 1));
95}
96
97#endif /* YAPCOMPOUNDTERM_H */
98
99
100