Hi John
Quil has 2 classes of functions. The first class is functions that can be called only inside :draw or :setup or :update. Basically anywhere where you can say "they need sketch to work properly". For example functions like q/smooth, q/ellipse. Function of the second class, on the other hand, you can call anywhere. They are static and don't need sketch to work. For example q/sqrt or q/abs belong to the second class. (because they are just math functions).
q/color belongs to the first class which requires sketch to run. I agree it's counterintuitive and I think in the past I also assumed that q/color is static and got the same error as you did. As a workaround you can define black as [0 0 0] and then convert it to color when you actually need it inside setup/draw. Yes, it's less optimal but it's ok unless you need to optimize performance really hard for your sketch.
To check whether a function can be used outside of sketch (e.g. with def like you want) you can check
http://quil.info/api. For example for
q/color it says on the right that it can work only inside sketch.
Nikita