static int put_name_arity(term_t t, functor_t f) { GET_LD FunctorDef fdef = valueFunctor(f); term_t a; if ( (a=PL_new_term_refs(2)) ) { PL_put_atom(a+0, fdef->name); return (PL_put_integer(a+1, fdef->arity) && PL_cons_functor(t, FUNCTOR_divide2, a+0, a+1)); } return FALSE; }
static void registerArithFunctors() { static functor_t arith[] = { FUNCTOR_ar_equals2, FUNCTOR_ar_not_equal2, FUNCTOR_smaller2, FUNCTOR_larger2, FUNCTOR_smaller_equal2, FUNCTOR_larger_equal2, FUNCTOR_is2, (functor_t) 0 }; functor_t *f; for(f = arith; *f; f++) { valueFunctor(*f)->flags |= ARITH_F; } }
static void registerControlFunctors() { static functor_t control[] = { FUNCTOR_comma2, FUNCTOR_semicolon2, FUNCTOR_bar2, FUNCTOR_ifthen2, FUNCTOR_softcut2, FUNCTOR_not_provable1, FUNCTOR_colon2, /* Module:Goal */ #ifdef O_CALL_AT_MODULE FUNCTOR_xpceref2, /* Goal@Module */ #endif (functor_t) 0 }; functor_t *f; for(f = control; *f; f++) { valueFunctor(*f)->flags |= CONTROL_F; } }
static int get_dict_ex(term_t t, Word dp, int ex ARG_LD) { Word p = valTermRef(t); deRef(p); if ( isTerm(*p) ) { Functor f = valueTerm(*p); FunctorDef fd = valueFunctor(f->definition); if ( fd->name == ATOM_dict && fd->arity%2 == 1 ) /* does *not* validate ordering */ { *dp = *p; return TRUE; } } if ( !ex ) return FALSE; PL_type_error("dict", t); return FALSE; }
static int get_create_dict_ex(term_t t, term_t dt ARG_LD) { Word p = valTermRef(t); deRef(p); if ( isTerm(*p) ) { Functor f = valueTerm(*p); FunctorDef fd = valueFunctor(f->definition); if ( fd->name == ATOM_dict && fd->arity%2 == 1 ) /* does *not* validate ordering */ { *valTermRef(dt) = *p; return TRUE; } } if ( PL_get_dict_ex(t, 0, dt, DICT_GET_ALL) ) { assert(isTerm(*valTermRef(dt))); return TRUE; } return PL_type_error("dict", t); }