Exemplo n.º 1
0
void add_bind_to_env(lisp_object* env, lisp_object* sym, lisp_object* obj)
{
  lisp_object* tmp = create_cons();
  //env must be ((dummy . dummy) (a . 1) (b . 3) ...)

  set_cdr(tmp, get_cdr(env));
  set_cdr(get_cdr(env), tmp);

  set_car(tmp, create_cons());

  set_car(get_car(tmp), sym);
  set_cdr(get_car(tmp), obj);
  return;
}
Exemplo n.º 2
0
void create_env()
{
  //env must be ((dummy . dummy) (a . 1) (b . 3) ...)
  env = create_cons();
  set_car(env, create_cons());
  set_cdr(env, create_empty_list());

  add_bind_to_env(env, create_symbol("car"), create_subr(LF_car));
  add_bind_to_env(env, create_symbol("cdr"), create_subr(LF_cdr));
  add_bind_to_env(env, create_symbol("atom?"), create_subr(LF_cons));
  add_bind_to_env(env, create_symbol("eq?"), create_subr(LF_eq));
  add_bind_to_env(env, create_symbol("quote"), create_fsubr(LF_quote));
  return;
}
Exemplo n.º 3
0
lisp_object* evls(lisp_object* arg, lisp_object* env)
{
  lisp_object *op, *tmp, *ret;
  tmp = ret = create_cons();
  add_protect(ret);

  for(op = arg; !null(op); op = get_cdr(op)){
    set_cdr(tmp, create_cons());
    tmp = get_cdr(tmp);
    add_protect(tmp);
    set_car(tmp,eval(op, env));
  }
  set_cdr(tmp, create_empty_list());
  return get_cdr(ret);
}
Exemplo n.º 4
0
lisp_object* LF_cons(lisp_object* obj)
{
  lisp_object* cons = create_cons();
  set_car(cons, get_car(obj));
  set_cdr(cons, get_car(get_cdr(obj)));
  return cons;
}
Exemplo n.º 5
0
object_t *make_arguments(object_t *args, object_t *env) {
  if (nilp(args)) { 
    return get_nil();
  } else {
    return create_cons(eval(car(args), env),
		       make_arguments(cdr(args), env));
  }
}
Exemplo n.º 6
0
int main() //@ : main
    //@ requires true;
    //@ ensures true;
    //@ terminates;
{
    //@ produce_call_below_perm_();
    //@ call_below_perm__elim(main);
    //@ produce_call_below_perm_();
    //@ call_below_perm__elim(main);
    //@ produce_call_below_perm_();
    //@ call_below_perm__elim(main);
    //@ produce_call_below_perm_();
    //@ call_below_perm__elim(main);
    //@ produce_call_below_perm_();
    //@ call_below_perm__elim(main);
    //@ produce_call_below_perm_();
    //@ call_below_perm__elim(main);
    //@ produce_call_below_perm_();
    //@ call_below_perm__elim(main);
    //@ produce_call_below_perm_();
    //@ call_below_perm__elim(main);
    //@ produce_call_below_perm_();
    //@ call_below_perm__elim(main);
    //@ produce_call_below_perm_();
    //@ call_below_perm__elim(main);
    
    void *l = create_nil();
    l = create_cons(3, l);
    l = create_cons(2, l);
    l = create_cons(1, l);
    list_object_contains(l, 2);
    //@ split_fraction list_object(l, _, _, _, _);
    list_object_intersects(l, l);
    void *l2 = create_nil();
    l2 = create_cons(2, l2);
    l2 = create_cons(4, l2);
    list_object_intersects(l, l2);
    //@ leak list_object(l, _, _, _, _);
    //@ leak list_object(l2, _, _, _, _);
    return 0;
}
Exemplo n.º 7
0
object_t *prim_cons(object_t *arguments) {
  object_t *first = car(arguments);
  object_t *second = car(cdr(arguments));
  return create_cons(first, second);
}