この記事を「TI-BASIC 83 (Z80)」、「TI-BASIC 89 (68k)」、「TI-BASIC Nspire (ARM)」というタイトルの記事に分割することが提案されています。(議論) ( 2019年2月) |
TI-BASICは、テキサス・インスツルメンツ社のグラフ電卓に組み込まれているBASIC風言語の正式名称[1]です。TI-BASICは、異なる製品向けにリリースされた、3つの異なる互換性のないバージョンからなる言語ファミリーです
- TI-BASIC 83 ( Z80プロセッサ上) TI-83 シリーズ、TI-84 Plus シリーズ用
- TI-BASIC 89 ( 68kプロセッサー上) TI-89 シリーズ、TI-92 シリーズ、Voyage 200 用
- TI-Nspireおよび TI-Nspire CAS用のTI-BASIC Nspire ( ARM プロセッサー上)
TIは言語を名前で呼ぶことはめったにありませんが、一部の開発者向けドキュメントではTI-BASICという名前が使用されています。[2] [3]
多くのアプリケーションにおいて、 TI-BASICでプログラムを作成する機能が組み込まれているため、TI電卓をプログラミングする最も便利な方法となっています。アセンブリ言語(しばしば「asm」と呼ばれる)も使用でき、アセンブリ言語への変換用のC コンパイラも存在します。モトローラ68000(68k)ベースの電卓用にはTIGCC、ザイログZ80ベースの電卓用にはSDCCがあります。ただし、どちらもクロスコンパイラであり、電卓上でのプログラミングはできません。TI-BASICはアセンブリ言語よりもかなり遅いため(インタープリタ型であるため)、ゲームやグラフィックスを多用するアプリケーションのプログラミングよりも、数学の問題を素早く解いたり、反復的なタスクを実行したりするプログラムの作成に適しています。一部の数学の教科書には、TI-BASIC(通常はTI-82/83/84シリーズで広く使用されているバリアント用)のプログラムが掲載されています。
TI-BASICは、コンピュータで使用されるプログラミング言語と比べるとややミニマルではありますが、プログラミングコミュニティにおいて重要な要素となっています。TIのグラフ電卓は多くの高校や大学の高度な数学の授業で必須となっているため、多くの学生がTI-BASICを通してプログラミングの世界を垣間見る機会となることがよくあります。
構文
TI-BASICのすべてのバージョンの構文は、典型的なBASIC実装とは多少異なります。言語自体には基本的な構造化プログラミング機能が備わっていますが、空白やインデントの使用は制限されており、あるいは全く許可されていません。また、やや非標準的な文字セットに依存しており、代入用の特定の文字(ほとんどの文字セットでは利用できない右矢印「STO」)、平方根と立方根、その他の数学記号、そしてトークン化されたエントリとキーワードの格納など、様々な機能を備えています。すべての文はコロンで始まり、コロンは行内の文の区切りとしても機能します。TI-83/84モデルでは、行末またはSTOトークンの前では、閉じ括弧、角括弧、中括弧、引用符を省略してスペースを節約できますが、場合によってはそのままにしておく方がよい場合もあります。例えば、TI-83/84モデルでは、特定の状況下では閉じ括弧がないとforループ関数の実行速度が大幅に低下します。[4]
式は中置記法を使用し、標準的な演算子の優先順位が適用されます。多くのステートメントでは、数学関数の構文と同様に、引数を括弧で囲む必要があります。代入 (変数にデータをコピーする) の構文は、従来のコンピュータープログラミング言語の多くと比べて変わっています。TI-BASIC では、等号を使用する BASIC のような let ステートメントや、algolのような演算子を使用する代わりに、 source → destinationという構文で:=右矢印演算子が使用されます。これは、1970 年代後半から 1980 年代前半にかけて初めて量産型の日本製英数字電卓が登場して以来、カシオ、キヤノン、シャープなどの多くの日本製電卓でよく見られる構文に似ています。
sto→
制御フロー
制御フロー文には、 if-then-elseブロック、forループ、whileループ、repeatループが含まれますが、switch文はありません。主な制御フロー文は次のとおりです。[5]
条件が満たされれば...そうでなければ...終了
For (変数、開始、停止、ステップ)
... End
条件が満たされている間...終了
繰り返し条件...終了
高級言語としては珍しく、TI-BASICの実装には、一般的にアセンブリ言語IS>で用いられる(Increment and Skip if Greater Than)文と(Decrement and Skip if Less Than)文が含まれています。プログラムの各セクションにはラベルを付けることができますが、特にZ80モデルでは、ラベルはプログラムやブロックのラベルではなく、
Goto文や関数の宛先として機能します。DS<Menu(
関数とサブルーチンの可用性は実装によって異なります。TI-82 系の計算機で使用可能なバージョンはGOSUBのような関数さえサポートしていませんが、プログラムを相互に呼び出したり、プログラム間で変数を共有したりすることは可能です。TI-89/92 ベースの設計では、共有関数、つまり基本的に値を返すことができるプログラムにアクセスできます。
データ型
TI-BASICは強力かつ動的に型付けされた言語です。利用可能なデータ型は、68k版とZ80版で大きく異なります。アセンブリ言語で書かれたライブラリを使用せずにユーザー定義のデータ型を作成することはできません。 リストは構造体の代わりによく使用されます
TI-83/84 (Z80)
- 数値変数
A( -Zおよびθθを含む)。これらにより、実数または複素数(実数のペアとして実装)を浮動小数点形式で格納できます。値の範囲は1 E -99から1 E 99で、精度は14桁ですが[6]、ユーザーに表示されるのは10桁のみです。ただし、27個の変数の制限は、リスト、行列、および整数表記の操作を使用することで拡張できます。リストまたは行列は、個別に参照できる一意の実数変数を含むために使用できます。整数は、実数の整数部分と小数部分として区切ることで、1つの実数変数に連結できます。各半分は、iPartコマンドとfPartコマンドを介して個別にアクセスできます。2進値を持つ変数は、2進数と10進数間の変換によって1つの整数として格納できます - 文字列
Str0( -を含むStr9)は、メモリに余裕がある限り、任意の数の文字や関数名を格納できます。expr()カタログにある関数を使って式として評価できます。 - -を含むリスト。追加のリストも作成できます。これらは基本的に、各要素に実数または複素数を格納するために使用される1 次元配列です。リストの次元、つまり要素の数は 1 ~ 999 ですが、使用可能なメモリが制限要因となる場合があります。リストの次元を以前よりも低く設定すると、末尾の要素は切り捨てられます。高く設定すると、末尾の余分な要素に 0 が埋め込まれます。次元は、リスト名の に有効な数値を格納することによって設定されます。デフォルトのリストは L 1~L 6という名前が付けられますが、カスタム リストを作成することもできます。これは、内のLトークンで参照されるリストの次元を設定し、その後に大文字の-およびで始まる 1 ~ 5文字の名前を続けることで行います。リストの個々の要素にアクセスするには、リスト名の後に要素番号を括弧で囲んで指定します。
L1L6dim(ListsAZθ - 行列(
[A]-を含む)は、[J]リストと同じ制約を受けます。行列の次元は最大99x99要素まで定義できますが、利用可能なメモリによって制限されます。ユーザー定義の行列を作成することはできないため、組み込みの10個の行列のみ使用できます。 - 方程式変数(- 、- 、、、など) 。これらは基本的に方程式を格納する文字列です。式やプログラム内で使用されると、評価されて値を返します。特定の値(定数、C)は、方程式名(従属変数、Y)の後に括弧で囲んだ定数値を記述することで、独立変数(X)に代入できます。以下の例では、「(4)」が使用されています(特に理由はありません)。((4)は、X=4のときの の値を返します)
Y0Y9r1r6uvwY1Y1
直接操作できないデータ型は次のとおりです。
- 写真(
Pic0-Pic9) - 背景 (
Image0-Image9) - プログラム (
prgm) - グラフデータベース(
GDB0-GDB9) - カラー(
BLUE、RED、...、GRAY)(全15色)
TI-89 (68k)
- 大量のデータを保存できる整数。68k電卓は、最大 という非常に大きな数値を完璧な精度で保存できます
- 10進浮動小数点数を使用した実数。計算機のモデルに応じて最大14桁の有効数字を格納できます。
- 実数のペアとして実装された複素数。
- 文字列
- リストは、要素ごとの演算をサポートする1次元の連結リストです。68k電卓では、要素は整数、実数、複素数、文字列、または式です。
- 行列(リストと同じ制約の対象となる要素を持つ)
- 68kシリーズならではの記号表現。
直接操作できないデータ型(行に名前だけを入力するとエラーが発生します)には次のものがあります。
- 画像
- データ
- プログラム
- 関数
変数
変数の使用柔軟性は電卓のモデルによって大きく異なります。例えば、TI-84 Plusでは、すべての英語の文字とシータ(Θ)が使用できます。
TI-83/84 (Z80)
TI-83/84では、プログラマーは最大5文字の名前のリストを作成できます。その他のデータ型は、27個の実数または複素数変数、および他の型のいくつかの定義済み変数名などに制限されています(例:行列は10個の変数[A]-のいずれかである必要があります[J])。TI-83/84では、Ansや財務変数などの特定の変数はRAM内で固定アドレスを持つため、27文字の変数よりもはるかに高速にアクセス可能です。 は、 Ans最後に評価されたコードの結果を含む特別な変数として機能します。変数のみを含む行も評価され、そのAns結果として に格納されます。Ansは頻繁に再評価されるため、非常に一時的な計算を保存したり、リストの項目など、通常はアクセスが遅い値を保持したりするために使用されます。すべての変数はグローバルです
TI-89 (68k)
対照的に、68k電卓では、すべての変数名にギリシャ文字を含む最大8文字の英数字を使用できます。さらに、変数は「フォルダ」にグループ化したり、ステートメント
で宣言することでプログラムに対してローカルにしたりできますLocal
コメント
TI-83/84 (Z80)
Z80プログラマーは、コメントを示すために行を "(二重引用符)で始めることがよくあります。 " で始まる行は実際には変数を変更して実行されますが、直後に読み込まれない
Ans限り、パフォーマンス以外の影響はありませんAns
TI-89 (68k)
68k電卓では、プログラムに1行コメントを含めることができます。コメント記号として©を使用します。「Prgm」文の直後にコメントがある場合、カタログでプログラムを選択したときにステータスバーに表示されます。このようなコメントは、パラメータの名前や型を説明するためによく使用されます。68kインタープリタには、行頭のスペース文字数を保存する機能が組み込まれており、これによりインデントが可能になります。
関数
TI-83/84 (Z80)
Z80版TI-BASICでは、68kのような明示的な「関数」は記述できません。ただし、すべての変数はグローバル変数であるため、別のプログラムを呼び出す前に、引数と同様に変数を設定することで関数をエミュレートできます。戻り値は存在しません。このReturn文は現在のプログラムを停止し、呼び出された場所からプログラムを続行します。
TI-89 (68k)
TI-BASICの68k版では、ユーザー定義関数を作成できます。関数はプログラムと同じ構文を持ちますが、...の代わりにFunc...キーワードを使用し、I/Oを実行したり、非ローカル変数を変更したり、プログラムを呼び出す命令は使用できません。ただし、関数は、、、などの組み込み関数を呼び出すことができるため、純粋ではない場合があります。すべての関数には戻り値があり、明示的な文がない場合、最後に評価された式
が戻り値になりますEndFuncPrgmEndPrgmgetTime()getKey()rand()Return
サードパーティ言語拡張
サードパーティアプリケーション(年代順にOmnicalc [7] 、 xLIB [8]、Celtic [9])は、Z80電卓のTI-BASIC関数をオーバーロードして、追加の言語機能を提供しています。サードパーティライブラリはsum()、、、関数をオーバーロードし、それぞれのアプリケーションによって処理および解釈されます。追加機能にはreal()、高速な図形描画ルーチン、スプライトおよびタイルマップツール、プログラムおよびVATの変更およびアクセス機能、GUI構築機能などがあり、そのほとんどはアセンブリプログラマによる使用に制限されています。すべての機能を使用するには、Doors CS 7.0のようなアプリケーションがユーザーの電卓にインストールされている必要があり、ライブラリの使用を妨げると見なされることがあります
det()identity()
例
こんにちは世界
以下のプログラムを実行すると、「HELLO, WORLD!」
というフレーズが表示されます
TI-83/84 (Z80シリーズ)
:「HELLO, WORLD!」を表示
TI-89 (68kシリーズ)
(追記:このコードは、TI-83/84 のように Disp 関数だけに短縮することができ、hellowld、prgm、endprgm は自動生成されます。)
:hellowld() :Prgm :ClrIO :Disp "HELLO, WORLD!" :一時停止 :ClrIO :ホーム画面表示 :プログラム終了
TI-Nspire
テキスト「HELLO, WORLD!」
TI-Nspire CX
テキスト「HELLO, WORLD!」
リストとループ
TI-83/84 (Z80シリーズ)
プログラム:リスト 変数の数を尋ねる :「変数の数?」を入力してください。A :"入力を検証するか停止する :A<1またはfPart(A)の場合 :停止 :リスト内の各値を確認するためのforループ :For(N,1,A) :「VAR」,Bを入力 :「N番目の要素に値を格納」 :B→L1(N) :End :"暗黙的に最終リストを返す :L1
TI-89 (68kシリーズ)
lists()
:Prgm
: ローカル n、i、c © ローカル変数 n、i、c を宣言します。
: {}→list © リストを空のリストとして初期化します。
: 「変数の数?」nを入力します。
: i,1,n の場合
: 入力 "変数 #"&string(i),c © & は、i を文字列に変換した後に連結します。
: c→リスト[i]
:EndFor
:プログラム終了
リストには多くの名前を付けることができるため、多くのプログラムで以前のデータを上書きすることなく多くのリストを操作できます。TI-82のリストはカスタム名を持つことができません(L1からL6は事前にプログラムされています)。TI-85とTI-86は添え字付きの変数名を扱う機能がありません。TI-81はリストをまったく扱うことができません。リストは、様々な回帰分析などを含む統計を計算するための、多数の組み込みTI-BASIC関数で使用できます。[1]これらはプログラム内で呼び出すことができますが、実行を一時停止している間も情報が表示され、特定の結果を変数に格納することはできません
再帰
再帰は可能です。プログラムは、それ自身から、または別のプログラムから呼び出すことができます
TI-83/84 (Z80シリーズ)
以下の例は階乗を計算するために使用されます。これが機能するには、X階乗関数のパラメータであり、A1に等しくなければなりません
プログラム:事実 :X=0の場合 :その後 :Aを表示 :停止 :End :XA→A :X-1→X :プログラムファクト
TI-89 (68kシリーズ)
factui() :Prgm :ローカルn :fact(x)=Funcを定義する : x=0の場合 : 1を返す : x*fact(x-1)を返す : EndFunc : Input "数値を入力してください", n : Disp "n! = " : 事実を表示する(n) :プログラム終了
関数
68kシリーズでは、プログラムと関数を区別しています。関数はプログラムと似ていますが、非ローカル変数の変更を含むI/Oを実行する文を許可せず、明示的な文がない場合はReturn最後に評価された式
の値を返すという点が異なります
fact(x) :関数 :x=0の場合 :1を返す :x<0の場合 : undef を返す : x*fact(x-1) :End Function
エディタとツール
1990年代にグラフ電卓を趣味とするコミュニティが成長するにつれ、共有とコラボレーションが促進され、メーリングリストやディスカッションフォーラムでTI-BASICコードを共有する必要性が高まりました。当初は、電卓の画面からコンピュータにTI-BASICコードを手動で入力するか、逆にプログラムを手動で電卓に入力することで行われていました。TI-BASICプログラムはトークン化された形式で保存されるため、標準的なコンピュータのテキストエディタでは編集できません。そのため、電卓プログラミングコミュニティが成熟するにつれて、自動コンバータの必要性が生じました。テキサス・インスツルメンツのTI-GraphLinkアプリケーションによって生成された、コンピュータに保存されたTI-BASICプログラムの形式は最終的に解読され、これらのファイルを操作するためのサードパーティ製ツールが作成されました。TIは、TI-GraphLinkリンクプログラムの特定のリリースに組み込むBASICエディタを作成しましたが、広く使用されることはありませんでした。特に、フォーラムにコピー&ペーストすると正しく表示されないカスタム文字セットを使用していました
2005年、ジョー・ペンナはTI-GraphLinkエディタのテキストを標準Unicodeに変換するトランスレータツールOptiBASICを開発しました。このプロジェクトはすぐに拡張され、正規表現ベースのTI-BASICオプティマイザが追加されました。[10]一方、Cemetechのクリストファー・「カーム・マーティアン」・ミッチェルは、トークン化されたTI-BASICプログラムからプレーンテキスト(後にHTMLおよびBBCode形式)のコンテンツを抽出するオンラインコンバータの開発に着手しました。 [11]このコンバータは、オンラインプログラムエディタ、エクスポータ、TI-83 Plusエミュレータを含むように拡張されました。[12] SourceCoderプロジェクトは2005年末にOptiBASICを吸収しました。現在使用されている他の主要なTI-BASICエディタは、ショーン・「マースソフト」・マクフォールが開発したTokenIDE(または「トークンズ」)のみです。オフラインエディタであるTokensは、TI-BASICプログラムのインポート、編集、エクスポートが可能で、プログラムのサイズと正確性を追跡するためのツールや、スプライト/画像エディタなどの補助機能も備えています。XMLファイルに保存されたトークン定義をベースに構築されており、ユーザーが指定した任意のトークンマッピングに対応できるように拡張可能です。[13]
NSprireシリーズ、TI 92 plus、Voyage 200電卓のプログラムは、フラットなクリアテキスト(Ansi/Ascii/ISO 8859-*)形式で転送・保存でき、TI電卓プログラミング用のIDEも複数存在します。TI電卓向けには、 TextPadの構文定義、コードスニペット、チャートが用意されており、構文定義はZeusエディタで使用される形式に変換されています。[14] [15] クリアテキスト形式は、電卓上のLuaインタープリタでも使用されています。
TI Basic の TI89-92-Voyage 200 バリアント用の PC 側インタープリタを開発するための独立したプロジェクトが存在し、これにより電卓用のプログラムを直接実行できるだけでなく、このインタープリタを呼び出す他の言語の複合プログラムも実行できるようになります。インタープリタは、Windows のコンソール モードで標準の入力、出力、エラー、指定可能なログ ファイルと構成ファイルを使用します。また、電卓で使用されるグラフィックスを複製する 2 番目のプログラムは、Tcl、Perl、Rexx、C、およびその他の言語に統合されている Tk ツールと同じように、このインタープリタに関連付けられます。VBScript で使用する Tk のようなツールを開発する関連プロジェクトが、このツールのソースです。[16] VBA および WSH エンジンを介して PC 側の TI Basic をスプレッドシート プログラムやデータベース プログラムと統合する 3 番目のツールも構想されています。このプロジェクトには、電卓側のUnixスタイルのシェルとRexxおよびPerlインタープリタ、Fortran 77インタープリタ、およびさまざまなカシオ、HP、シャープ、テキサスインスツルメンツの電卓プログラミング言語間およびそれらのプログラミング言語とさまざまなスクリプト言語間でのコンバーターも含まれています。[16]
関連項目
参考文献
- ^ ab "TI-84 Plus" . education.ti.com
- ^ https://education.ti.com/educationportal/sites/US/productDetail/us_ti89ti.html?bid=5 2017年10月13日アーカイブ、Wayback Machine TI-89 at education.ti.com
- ^ 「Luaスクリプト」. education.ti.com . 2011年6月5日閲覧。
- ^ https://tibasicdev.wikidot.com/timings さまざまなコマンド時間の分析。
- ^ 「スキルビルダー1:ループとFor(...)ループ」(PDF) . TI Education . 2025年4月17日閲覧。
- ^ TI-83 Plus開発者ガイド(PDF) (第3版). Texas Instruments Incorporated. 2002年5月28日. pp. 22– 23. 2025年3月19日時点のオリジナルよりアーカイブ(PDF) . 2024年8月15日閲覧。
- ^ ticalc.org. Omnicalc v1.00 リリース アーカイブ 2024-06-14 at the Wayback Machine
- ^ エヴァンス、トラヴィス。xLIB by パトリック・プレンダーガスト 2024年6月14日アーカイブ、Wayback Machineにて
- ^ Sutherland, Nikky. Find an Oasis in Doors CS 7.0ウェイバックマシンで2023年11月27日にアーカイブ
- ^ 「Cemetech – United-TI アーカイブ – プロジェクトアイデア/新規プロジェクトの開始 – opTI-BASIC [トピック]」。UnitedTI の Cemetech アーカイブ。2013年10月4日時点のオリジナルよりアーカイブ。 2012年8月5日閲覧。
- ^ Michael Vincent. 「MartianがSourceCoderを開発し、BASIClingsを制覇」ticalc.org. 2012年8月8日時点のオリジナルよりアーカイブ。 2012年8月5日閲覧。
- ^ Travis Evans. 「CemetechのSourceCoderがアップデート」. ticalc.org. 2012年8月8日時点のオリジナルよりアーカイブ。 2012年8月5日閲覧。
- ^ Ryan Boyd. 「TokenIDE / Shaun McFall インタビュー」. ticalc.org. 2013年2月2日時点のオリジナルよりアーカイブ。 2013年1月18日閲覧。
- ^ TextPadサイト
- ^ プログラミング - ticalc.org
- ^ abc 「今日の電卓プログラミング」、スプレッドシート第6巻第14号、2004年11月23日、pp 5
外部リンク
- テキサス・インスツルメンツの公式ウェブサイト
