Пример #1
0
void fprint_env (FILE * out, struct ENV * env) {
  if (env != NULL) {
    if (env->next != NULL) {
      fprintf(out,"%s -> ", env->ident);
      fprint_term (out,env->term);
      printf(", ");
    }
    else{
      fprintf(out,"%s -> ", env->ident);
      fprint_term (out,env->term);
    }
  }
}
static
void linear_delete(Mindex mdx, Term t)
{
  Plist curr, prev;
  prev = NULL;
  curr = mdx->linear_first;
  while (curr != NULL && curr->v != t) {
    prev = curr;
    curr = curr->next;
  }
  if (curr == NULL) {
    fprint_term(stderr, t);
    fprintf(stderr, "\n");
    fatal_error("mindex_delete (linear), term not found.");
  }
  else {
    if (prev != NULL)
      prev->next = curr->next;
    else
      mdx->linear_first = curr->next;
    if (curr == mdx->linear_last)
      mdx->linear_last = prev;
    free_plist(curr);
  }
}  /* linear_delete */
Пример #3
0
static
void p_binding(int vnum, Context vc, Term t, Context tc)
{
  Term vt, ti;
  vt = get_variable_term(vnum);
  ti = apply(vt, vc);
  printf("[");
  fprint_term(stdout,vt);
  printf(",0x%x:%d] -> [", (unsigned) vc, vc->multiplier);
  fprint_term(stdout,t);
  printf(",0x%x:%d] (", (unsigned) tc, tc->multiplier);
  fprint_term(stdout,ti);
  printf(")\n");
  free_term(vt);
  free_term(ti);
}  /* p_binding */
static
void fprint_linear_index(FILE *fp, Plist first)
{
  Plist p;
  for (p = first; p != NULL; p = p->next) {
    Term t = p->v;
    fprintf(fp, "FPA_ID=%u: ", (unsigned) FPA_ID(t));
    fprint_term(fp, t);
    fprintf(fp, "\n");
  }
}  /* fprint_linear_index */
Пример #5
0
void fprint_term (FILE * out, struct TERM * tree) {
  TRACE("fprint_term\n");
  switch (tree->type) {
    case TYPE_TERM_INTEGER :
      TRACE("integer");
      fprintf(out,"%d", tree->integer.value);
      break;
    case TYPE_TERM_VARIABLE : 
      TRACE("variable");
      fprintf (out,"%s", tree->variable.value);
      break;
    case TYPE_TERM_QUOTE : 
      TRACE("quote");
      fprintf (out, "(quote ");
      fprint_term (out,tree->quote.content) ;
      fprintf(out,")");
      break;
    case TYPE_TERM_ABSTRACTION : 
      TRACE("abstraction")
      fprintf(out,"(lambda (%s) ", tree->abstraction.variable);
      fprint_term (out, tree->abstraction.body) ;
      fprintf(out,")");
      break;
    case TYPE_TERM_CLOSURE : 
      TRACE("closure")
      fprintf(out,"(lambda (%s) ", tree->closure.variable);
      fprint_term (out, tree->closure.body) ;
      fprintf(out,")[");
      fprint_env(out, tree->closure.env);
      fprintf(out,"]");
      break;
    case TYPE_TERM_APPLICATION : 
      TRACE("application")
      fprintf(out,"(");
      fprint_term (out, tree->application.left) ;
      fprintf(out, " ");
      fprint_term (out, tree->application.right) ;
      fprintf(out,")");
      break;
    case TYPE_TERM_LET : 
      TRACE("let")
      fprintf(out,"(let (%s ", tree->let.variable);
      fprint_term (out, tree->let.init) ;
      fprintf(out, ") ");
      fprint_term (out, tree->let.body) ;
      fprintf(out,")");
      break;
    }
}
Пример #6
0
/* PUBLIC */
void fprint_term(FILE *fp, Term t)
{
  if (t == NULL)
    fprintf(fp, "fprint_term: NULL term\n");
  else {
    if (VARIABLE(t))
      fprintf(fp, "v%d", VARNUM(t));
    else {
      fprint_sym(fp, SYMNUM(t));
      if (COMPLEX(t)) {
	int i;
	fprintf(fp, "(");
	for (i = 0; i < ARITY(t); i++) {
	  fprint_term(fp, ARG(t,i));
	  if (i < ARITY(t)-1)
	    fprintf(fp, ",");
	}
	fprintf(fp, ")");
      }
    }
  }
  fflush(fp);
}  /* fprint_term */
Пример #7
0
/* PUBLIC */
void p_term(Term t)
{
  fprint_term(stdout, t);
  printf("\n");
  fflush(stdout);
}  /* p_term */