Hacker News new | ask | show | jobs
by raldi 3130 days ago
Toward the end of `print_obj()`, we see:

        if (is_pair(cdr(ob))) {
          printf(" ");
          print_obj(cdr(ob), 0);
        }
How could this `if` statement ever evaluate to false? We already verified that `cdr(ob) != 0`, and the CDR can never be a plain old string, so isn't this `if` superfluous?
2 comments

I don't know about this implementation in particular, but in general a cons cell is just an object with two slots in it. You can use it to represent a list (by putting another cons or nil in the cdr), but you can also use it to represent other things. For example, a pair, by putting an arbitrary object in the car and cdr. This is a pretty common technique, see "a-list" for one application.
Nope. It still can be an atom. Only if it's a pair (i.e. a cons with two cells, not just one) it prints the next.
Even if that were possible (and with this codebase, I don't think it is), I don't see any code in this function that would print the atom in such a case. It seems like it would just print nothing.
Look harder, it does. There are only cons (pair) and atoms.
The author just confirmed, the if-statement does nothing: https://github.com/carld/micro-lisp/issues/9
Can you give me an example program that, when fed as input, would cause this if-statement to evaluate to false?