Esempio n. 1
0
object *display_proc(object *arguments) {

    object *obj;
    char *str  = NULL;

    obj = car(arguments);

    switch (obj->type) {
        case CHARACTER:
            printf("%c", obj->data.character.value);
            break;
        case FIXNUM:
            printf("%ld", obj->data.fixnum.value);
            break;
        case FLOATNUM:
            printf("%f", obj->data.floatnum.value);
            break;
        case STRING:
            printf("%s", str = obj->data.string.value);
            break;
        case SYMBOL:
            printf("%s", obj->data.symbol.value);
            break;
        case ERROR:
            printf("Error %ld: %s", obj->data.error.error_num, obj->data.error.error_msg);
            break;
        default:
            fprintf(stderr, "cannot display type\n");
    } // switch

    return ok_symbol();

}
Esempio n. 2
0
object *close_output_port_proc(object *arguments) {
    int result;
    result = fclose(car(arguments)->data.output_port.stream);
    if (result == EOF) {
        fprintf(stderr, "could not close output port\n");
        exit(EXIT_FAILURE);
    }
    return ok_symbol();
}
Esempio n. 3
0
object *write_char_proc(object *arguments) {
    object *character;
    FILE *out;
    character = car(arguments);
    arguments = cdr(arguments);
    out = is_empty(arguments) ?
             stdout :
             car(arguments)->data.output_port.stream;
    putc(character->data.character.value, out);
    fflush(out);
    return ok_symbol();
}
Esempio n. 4
0
object *write_proc(object *arguments) {
    object *exp;
    FILE *out;

    exp = car(arguments);
    arguments = cdr(arguments);
    out = is_empty(arguments) ?
             stdout :
             car(arguments)->data.output_port.stream;
    write(out, exp);
    fflush(out);
    return ok_symbol();
}
Esempio n. 5
0
object *eval_definition(object *exp, object *env) {
    define_variable(definition_variable(exp), eval(definition_value(exp), env), env);
    return ok_symbol();
}
Esempio n. 6
0
object *eval_assignment(object *exp, object *env) {
        set_variable_value(assignment_variable(exp), eval(assignment_value(exp), env), env);
        return ok_symbol();
}
Esempio n. 7
0
object *set_cdr_proc(object *arguments) {
    set_cdr(car(arguments), cadr(arguments));
    return ok_symbol();
}