add com bltin
This commit is contained in:
parent
4f27a4c9b2
commit
e26eefc279
16
bltin.c
16
bltin.c
@ -19,11 +19,11 @@ extern Object* fnlambda(Object *, Object *);
|
|||||||
extern Object* fndefine(Object *, Object *);
|
extern Object* fndefine(Object *, Object *);
|
||||||
extern Object* fnsetq(Object *, Object *);
|
extern Object* fnsetq(Object *, Object *);
|
||||||
extern Object* fnundef(Object *, Object *);
|
extern Object* fnundef(Object *, Object *);
|
||||||
|
extern Object* fnquote(Object *, Object *);
|
||||||
|
extern Object* fncar(Object *, Object *);
|
||||||
|
extern Object* fncdr(Object *, Object *);
|
||||||
|
extern Object* fncons(Object *, Object *);
|
||||||
/*extern Object* fnminus(Object *, Object *);*/
|
/*extern Object* fnminus(Object *, Object *);*/
|
||||||
/*extern Object* fncons(Object *, Object *);*/
|
|
||||||
/*extern Object* fnquote(Object *, Object *);*/
|
|
||||||
/*extern Object* fncar(Object *, Object *);*/
|
|
||||||
/*extern Object* fncdr(Object *, Object *);*/
|
|
||||||
|
|
||||||
Bltinfn
|
Bltinfn
|
||||||
bltinlookup(Object *obj)
|
bltinlookup(Object *obj)
|
||||||
@ -37,11 +37,11 @@ bltinlookup(Object *obj)
|
|||||||
{&Plus , fnplus},
|
{&Plus , fnplus},
|
||||||
{&Define ,fndefine},
|
{&Define ,fndefine},
|
||||||
{&Setq ,fnsetq},
|
{&Setq ,fnsetq},
|
||||||
|
{&Quote ,fnquote},
|
||||||
|
{&Car ,fncar},
|
||||||
|
{&Cdr ,fncdr},
|
||||||
|
{&Cons ,fncons},
|
||||||
{&Minus ,0},
|
{&Minus ,0},
|
||||||
{&Cons ,0},
|
|
||||||
{&Quote ,0},
|
|
||||||
{&Car ,0},
|
|
||||||
{&Cdr ,0},
|
|
||||||
{0},
|
{0},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
36
eval.c
36
eval.c
@ -83,6 +83,42 @@ fndefine(Object *env, Object *list)
|
|||||||
return env->vars;
|
return env->vars;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Object*
|
||||||
|
fnquote(Object *env, Object *list)
|
||||||
|
{
|
||||||
|
if(exprlen(list)!=1)
|
||||||
|
error("Malformed quote");
|
||||||
|
return list->car;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object*
|
||||||
|
fncar(Object *env, Object *list)
|
||||||
|
{
|
||||||
|
list = evallist(env, list);
|
||||||
|
if(list->car->type != OCELL || list->cdr != &Nil)
|
||||||
|
error("Malformed Car");
|
||||||
|
return list->car->car;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object*
|
||||||
|
fncdr(Object *env, Object *list)
|
||||||
|
{
|
||||||
|
list = evallist(env, list);
|
||||||
|
if(list->car->type != OCELL || list->cdr != &Nil)
|
||||||
|
error("Malformed Car");
|
||||||
|
return list->car->cdr;
|
||||||
|
}
|
||||||
|
|
||||||
|
Object*
|
||||||
|
fncons(Object *env, Object *list)
|
||||||
|
{
|
||||||
|
if(exprlen(list) != 2)
|
||||||
|
error("Malformoed cons");
|
||||||
|
list = evallist(env, list);
|
||||||
|
list->cdr = list->cdr->car;
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
Object*
|
Object*
|
||||||
fnplus(Object *env, Object *list)
|
fnplus(Object *env, Object *list)
|
||||||
{
|
{
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user