Example #1
0
int main(int argc, char const *argv[]) {
    char* read_buf = malloc(READ_BUF_LEN);
    hashmap_t *hm = create_hash_map(HASHMAP_SIZE);

    int result = scanf("%511[a-z|A-Z|']", read_buf);
    int *count;
    while (result != EOF) {
        if (result == 1) {
            to_lower_case(read_buf);

            count = lookup_val(read_buf, hm);
            if (count != NULL) {
                *count = *count + 1;
            } else {
                add_val(read_buf, 1, hm);
            }
        } else if (result == 0) {
            scanf("%511[^a-z|A-Z|']", read_buf);
        }

        result = scanf("%511[a-z|A-Z|']", read_buf);
    }

    node_t **words = to_sorted_array(hm);
    for (int i = 0; i < hm->size; i++) {
        printf("%s %d\n", words[i]->string, words[i]->count);
    }

    return 0;
}
Example #2
0
pointer eval(pointer sexpr)
{
        if (sexpr == NULL)
                return NULL;

        switch(type(sexpr)) {
        case T_NUMBER:
        case T_STRING:
        case T_MACRO:
        case T_BUILT_IN_REGULAR_PROC:
        case T_BUILT_IN_SPECIAL_PROC:
                return sexpr;
        case T_SYMBOL:
                return lookup_val(lookup_symbol(sexpr));
        case T_PAIR:
                return apply(sexpr);
        default:
                printf("Unknow Object\n");
                exit(1);
        }
}