シンボルの名前を文字列として受け取り、そのシンボルが既に定義されているかどうかを返す関数が必要です。関数ValueQ
は近いですが、関数名に対して False を返します。また、文字列ではなく記号を取ります。
例:
defined["N"] --> True (predefined function N)
defined["x"] --> False
x = 7;
defined["x"] --> True (x is now defined)
defined["7"] --> True (7 is a number)
f[x_] := 2x
defined["f"] --> True (f has DownValues)
g[x_][y_] := x+y
defined["g"] --> True (g has SubValues)
PS: DownValues と SubValues の両方をチェックする必要があることを指摘してくれた Pillsy に感謝します。