# `undefined_p`, `undefined_symbol_p`

`undefined_p`,
`undefined_symbol_p` — test for undefined types and symbols.

## Syntax

`undefined_p (``s_exp`)
undefined_symbol_p (`s_exp`)

## Arguments

`s_exp`Any Gamma or Lisp expression.

## Returns

`t` if the value of
`s_exp` is not defined; otherwise `nil`.

## Description

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.

## Example

`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>