【セルフ】SMILE BASIC ver.3系列に型判別関数が存在しないことについて

2

備考
ver.3=プチコン3号orプチコンBIGの仕様
ver.4=プチコン4の仕様
という意味である

また、数値型は整数と実数に分かれているが、これは簡単に区別できるので省略する

御子神アイリス(MI-23) @ShionAmasato

マジでプチコン3号にtypeof欲しいね (ポリフィル書こうとしても、すべての型を判別する関数は作れない)

2022-06-23 16:21:13
御子神アイリス(MI-23) @ShionAmasato

具体的には3号の仕様だと「普通の数値と配列」の判別をエラーなくやる方法が存在しない #petitcom #プチコン3号 twitter.com/ShionAmasato/s…

2022-06-23 16:22:49
御子神アイリス(MI-23) @ShionAmasato

配列ではない数値or文字列の判別は 数値==文字列がなぜか3を返す裏仕様によって、すごく簡単にできる

2022-06-23 16:29:21

※正しくは「文字列==数値」(数値が右辺
つまり 値==0 が3になれば、その値は文字列である

御子神アイリス(MI-23) @ShionAmasato

辛うじて文字列と配列は区別できる(文字列の添字構文のおかげ)

2022-06-23 16:23:35
御子神アイリス(MI-23) @ShionAmasato

具体的には 空文字列をpushしたとき長さが増加するか? yes→文字列配列 no→配列ではない文字列 という方法

2022-06-23 16:27:19

調べたい変数をS$としたとき
OLDLEN=LEN(S$)
PUSH S$,""
IF OLDLEN<LEN(S$) THEN ?"S$は文字列配列である"

御子神アイリス(MI-23) @ShionAmasato

(配列ではない)数値or文字列の判別方法 と組み合わせることによって 数値配列,文字列,文字列配列の3通りの判別までは実装することができる

2022-06-23 16:57:19
御子神アイリス(MI-23) @ShionAmasato

一方で数値の場合 配列ではない数値にpushするとエラーになるためその方法が不可能

2022-06-23 16:27:51
御子神アイリス(MI-23) @ShionAmasato

よって、取り残された 数値or数値配列の区別パターンはどうあがいても実装できないとなる

2022-06-23 16:30:04
御子神アイリス(MI-23) @ShionAmasato

自力で型判別する関数が作れないのであれば、組み込み関数で存在する必要があるんだけど どういうわけかその機能をつけ忘れてるのは、言語仕様の欠陥ではないだろうか (次のバージョンであるver.4には存在する)

2022-06-23 16:32:44