ao_scheme_poly_mark(cons->car, 1);
if (!cdr)
break;
- if (ao_scheme_poly_type(cdr) != AO_SCHEME_CONS) {
- ao_scheme_poly_mark(cdr, 1);
+ if (!AO_SCHEME_IS_CONS(cdr)) {
+ ao_scheme_poly_mark(cdr, 0);
break;
}
cons = ao_scheme_poly_cons(cdr);
cdr = cons->cdr;
if (!cdr)
break;
- if (ao_scheme_poly_base_type(cdr) != AO_SCHEME_CONS) {
+ if (!AO_SCHEME_IS_CONS(cdr)) {
(void) ao_scheme_poly_move(&cons->cdr, 0);
break;
}
ao_poly cdr;
int first = 1;
+ ao_scheme_print_start();
printf("(");
while (cons) {
if (!first)
printf(" ");
- ao_scheme_poly_write(cons->car);
- cdr = cons->cdr;
- if (cdr == c) {
- printf(" ...");
+ if (ao_scheme_print_mark_addr(cons)) {
+ printf("...");
break;
}
+ ao_scheme_poly_write(cons->car);
+ cdr = cons->cdr;
if (ao_scheme_poly_type(cdr) == AO_SCHEME_CONS) {
cons = ao_scheme_poly_cons(cdr);
first = 0;
}
}
printf(")");
+ ao_scheme_print_stop();
}
void
struct ao_scheme_cons *cons = ao_scheme_poly_cons(c);
ao_poly cdr;
+ ao_scheme_print_start();
while (cons) {
- ao_scheme_poly_display(cons->car);
- cdr = cons->cdr;
- if (cdr == c) {
+ if (ao_scheme_print_mark_addr(cons)) {
printf("...");
break;
}
+ ao_scheme_poly_display(cons->car);
+
+ cdr = cons->cdr;
if (ao_scheme_poly_type(cdr) == AO_SCHEME_CONS)
cons = ao_scheme_poly_cons(cdr);
else {
cons = NULL;
}
}
+ ao_scheme_print_stop();
}
int