List read_list_aux() { /* チャレンジ問題: この read_list_auxを再帰を使わずに定義し直せ */ List ret; int next; if (scanf("%d", &next)==0) { return NULL; } else { return cons(next, read_list_aux()); } } List read_list() { List ret; char c; scanf(" %c", &c); if(c!='(') { /* '('を読み捨て */ fprintf(stderr, "parse error: %c\n", c); } ret = read_list_aux(); scanf(" %c", &c); if(c!=')') { /* ')'を読み捨て */ fprintf(stderr, "parse error: %c\n", c); } return ret; }