@natecull I think it's an arbitrary (guided by the language culture's philosophy) choice that many programming languages have had to make over the years. Some languages (Objective C) have their NIL respond to any message with a NIL. Other languages (Scheme, Smalltalk) may respond to some messages, not to others, and may throw exceptions[0].

# has a philosophy that is very pragmatic: "It is easy to produce a segfault in PicoLisp."[1], so I think the liberal choice seems entirely appropriate.

Only a design error will be negatively affected by "infinite NIL", and an infinite recursion because you forgot the base case is usually discovered pretty early in your development.

[0] Guile: "Wrong type argument in position 1 (expecting pair): ()"
[1] http://www.software-lab.de/doc/faq.html#segfault