えーっと、スレッドタイトルと本文から推察するに、
length(p) として p の配列長を調べる事で、
配列か変数かを判断しようとしてるんですかね?
もしそうなら、その判断の仕方では無理があると思います。
単純変数でも length は利用でき、かつ、それは 1 を返すからです。
これだと、長さ 1 の配列と区別出来ません。
mes length(a) ; 長さ 1
dim b, 1
mes length(b) ; 長さ 1。あれ、区別出来ない!!
もし、どちらも単純変数と扱って構わないなら、以下のスクリプトで OK かと。
#module
#defcfunc is_array array p
return length(p) > 1
#global
mes is_array(a)
dim b, 10
mes is_array(b(2))
HSP でも 配列の要素 b(0) を b でアクセス出来たり、
単純変数 a を a(0) でアクセス出来たり、
配列長 1 の配列と単純変数を区別せずに扱ってますよね。
var 型変数で実装したいとのことですが、var も array も
インデックス指定出来るかどうかの違いがある位で結局似たようなものなので、
これでも十分ではないかと思うのですが、どうでしょう?