In the ASCII table, punctuation characters appear between the non-printing characters and before the numbers (
!"#$%&')*+,-./), between the numbers and the uppercase letters (
:;<=>?@), between the uppercase letters (
[\]^_`) and the lowercase letters, and after the lowercase letters (
On first glance, one would expect these to be grouped together; possibly either before all alphanumerical characters or behind them. But this is not the case; they apprear spread out in these different groups.
Why is this the case? Is there some (possible historical) reason why the characters are grouped this way?