Exemple #1
0
Obj adjoinArg(Obj val, Obj arglist) {
    List* args = GETLIST(arglist);

    if (!args) return LISTOBJ(makeList(val, args));

    List* pnr = args;
    while (pnr->cdr) pnr = pnr->cdr;

    pnr->cdr = malloc(sizeof(List));
    pnr = pnr->cdr;
    pnr->car = val;
    pnr->cdr = NULL;

    return LISTOBJ(args);
}
Exemple #2
0
Obj transformOr(Obj expr) {
    Obj seq = boolExps(expr);

    if (noExps(seq)) return FALSEOBJ;

    Obj first = firstExp(seq);

    List* cdr = GETLIST(seq)->cdr;
    Obj rest = LISTOBJ(makeList(OROBJ, cdr));

    List* ifTrans = makeList(
        IFOBJ, makeList(first, makeList(TRUEOBJ, makeList(rest, NULL))));

    return LISTOBJ(ifTrans);
}
Exemple #3
0
Obj transformDelay(Obj expr) {
    List* list =
        makeList(LAMBDAOBJ, makeList(NULLOBJ, makeList(delayExpr(expr), NULL)));

    Obj obj = LISTOBJ(list);
    return obj;
}
Exemple #4
0
Obj adjoinArg(Obj val, Obj arglist) {
	List* args = GETLIST(arglist);
	List* head = malloc(sizeof(List));
	head->car = val;
	head->cdr = args;
	head = reverse(head);
	return LISTOBJ(head);
}
Exemple #5
0
bool noCompoundArgs(Obj expr) {
    if (noArgs(expr))
        return true;
    else {
        List* list = GETLIST(expr);
        return isSimple(list->car) && noCompoundArgs(LISTOBJ(list->cdr));
    }
}
Exemple #6
0
Obj makeFunc(Obj params, Obj body, Obj env) {
	List* list = 
		makeList(NAMEOBJ(FUN_KEY),
			makeList(params,
				makeList(body,
					makeList(env, NULL))));

	Obj obj = LISTOBJ(list);
	return obj;
}
Exemple #7
0
Obj beginActions(Obj expr) {
	return LISTOBJ(CDR(GETLIST(expr)));
}
Exemple #8
0
Obj restExps(Obj seq) {
	// return MKOBJ(LIST, list, CDR(GETLIST(seq)));
	return LISTOBJ(CDR(GETLIST(seq)));
}
Exemple #9
0
Obj funcBody(Obj obj) {
	return LISTOBJ(CDDR(GETLIST(obj)));
}
Exemple #10
0
Obj restArgs(Obj expr) {
	return LISTOBJ(CDR(GETLIST(expr)));
}
Exemple #11
0
Obj makeFunc(Obj params, Obj body, Obj env) {
    List* list = makeList(env, makeList(params, makeList(body, NULL)));

    return LISTOBJ(list);
}