yapr
This commit is contained in:
parent
03232f53ce
commit
134288da68
11
CXX/yapa.hh
11
CXX/yapa.hh
@ -94,7 +94,9 @@ public:
|
||||
/// get name of (other way)
|
||||
inline const char *text(void) { return getName(); } ;
|
||||
/// get prop of type
|
||||
Prop getProp( PropTag tag ) { return Yap_GetAProp( a , (PropFlags)tag ); }
|
||||
Prop getProp( PropTag tag ) { return Yap_GetAProp( a , (PropFlags)tag ); };
|
||||
/// as Atom
|
||||
Atom asAtom() { return a; };
|
||||
};
|
||||
|
||||
/**
|
||||
@ -158,12 +160,15 @@ public:
|
||||
/// Getter: extract name of functor as an atom
|
||||
///
|
||||
/// this is for external usage.
|
||||
YAPAtom name(void) { return YAPAtom(NameOfFunctor(f)); }
|
||||
inline YAPAtom name() { return YAPAtom(NameOfFunctor(f)); };
|
||||
|
||||
/// Getter: extract arity of functor as an unsigned integer
|
||||
///
|
||||
/// this is for external usage.
|
||||
uintptr_t arity(void) { return ArityOfFunctor(f); }
|
||||
inline arity_t arity() { return ArityOfFunctor(f); };
|
||||
/// Getter: extract functor as C pointer
|
||||
///
|
||||
/// inline Functor functor() { return f; };
|
||||
};
|
||||
|
||||
|
||||
|
21
CXX/yapi.cpp
21
CXX/yapi.cpp
@ -744,6 +744,27 @@ YAPQuery::YAPQuery(YAPFunctor f, YAPTerm mod, YAPTerm ts[])
|
||||
RECOVER_MACHINE_REGS();
|
||||
}
|
||||
|
||||
YAPQuery::YAPQuery(YAPFunctor f, YAPTerm mod, Term ts[])
|
||||
: YAPPredicate(f, mod) {
|
||||
|
||||
/* ignore flags for now */
|
||||
BACKUP_MACHINE_REGS();
|
||||
Term goal;
|
||||
|
||||
if (ts) {
|
||||
size_t arity = f.arity();
|
||||
goal = Yap_MkApplTerm(Yap_MkFunctor(f.name().asAtom(),arity), arity, ts);
|
||||
nts = RepAppl(goal) + 1;
|
||||
for (arity_t i = 0; i < arity; i++)
|
||||
XREGS[i + 1] = ts[i];
|
||||
} else {
|
||||
goal = MkVarTerm();
|
||||
}
|
||||
openQuery();
|
||||
names = YAPPairTerm(TermNil);
|
||||
RECOVER_MACHINE_REGS();
|
||||
}
|
||||
|
||||
#if 0
|
||||
YAPQuery::YAPQuery(YAPFunctor f, YAPTerm ts[]) : YAPPredicate(f) {
|
||||
/* ignore flags for now */
|
||||
|
@ -76,6 +76,7 @@ public:
|
||||
/// least
|
||||
/// the same arity as the functor.
|
||||
YAPQuery(YAPPredicate p, YAPTerm t[]);
|
||||
///
|
||||
/// full constructor,
|
||||
///
|
||||
///
|
||||
@ -83,6 +84,9 @@ public:
|
||||
/// least
|
||||
/// the same arity as the functor.
|
||||
YAPQuery(YAPFunctor f, YAPTerm mod, YAPTerm t[]);
|
||||
/// often, this is more efficient
|
||||
///
|
||||
YAPQuery(YAPFunctor f, YAPTerm mod, Term t[]);
|
||||
/// functor/term constructor,
|
||||
///
|
||||
/// It is given a functor, and an array of terms that must have at least
|
||||
|
@ -57,9 +57,8 @@ setup_args = dict(
|
||||
'Intended Audience :: Developers',
|
||||
'Intended Audience :: System Administrators',
|
||||
'Intended Audience :: Science/Research',
|
||||
'License :: OSI Approved :: BSD License',
|
||||
'License :: OSI Approved :: Perl License',
|
||||
'Programming Language :: Prolog',
|
||||
'Programming Language :: Python :: 2.7',
|
||||
'Programming Language :: Python :: 3',
|
||||
],
|
||||
)
|
||||
@ -83,4 +82,5 @@ if 'setuptools' in sys.modules:
|
||||
setup_args.update(setuptools_args)
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.path += ['../swig']
|
||||
setup(**setup_args)
|
||||
|
@ -40,7 +40,7 @@ public:
|
||||
|
||||
if (q) {
|
||||
q->close();
|
||||
q = NULL;
|
||||
q = nullptr;
|
||||
}
|
||||
std::vector<Term> args = std::vector<Term>();
|
||||
yhandle_t sls = Yap_NewHandles(sexps.length());
|
||||
@ -49,8 +49,21 @@ public:
|
||||
return false;
|
||||
args.push_back( Yap_GetFromSlot(sls+i) );
|
||||
}
|
||||
YAPTerm qt = YAPApplTerm(p_name,args);
|
||||
if (i==0) {
|
||||
YAPTerm qt = YAPAtomTerm(p_name);
|
||||
q = new YAPQuery(qt);
|
||||
} else {
|
||||
YAPFunctor f= YAPFunctor(p_name, args.length());
|
||||
YAPAtomTerm mod = YAPAtomTerm(p_module);
|
||||
q = new YAPQuery(f,mod,args.data());
|
||||
}
|
||||
if (q == nullptr)
|
||||
return false;
|
||||
bool rc = q->next();
|
||||
if (!rc) {
|
||||
failed = true;
|
||||
q = nullptr;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user