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; }
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); } }