These two functions perform a similar task, checking to see if the s_exp is defined. However, they differ in two important ways:
undefined_p examines the value of s_exp directly, whereas undefined_symbol_p expects the value of s_exp to be a symbol, and examines the value of that resulting symbol.
undefined_p evaluates its argument in a protected scope where any "Symbol is undefined" errors will be trapped and disregarded. undefined_symbol_p evaluates its argument without protection, so it is possible that a "Symbol is undefined" error could be thrown if the evaluation of s_exp generates such an error.
Gamma> a = #xyz
xyz
Gamma> undefined_p (a);
nil
Gamma> undefined_symbol_p (a);
t
Gamma> xyz = t;
t
Gamma> undefined_symbol_p (a);
nil
Gamma> undefined_p (y);
t
Gamma> undefined_symbol_p (y);
Symbol is undefined: y
debug 1>
See the GTK: Sending Queries section or the Photon: Sending Queries section of the History Functions chapter in the Cogent Tools Demo and Tutorials book for examples of the undefined_p function used in context.