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 と、Zilog 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]
式は中置記法を使用し、標準的な演算子の優先順位を使用します。多くの文では、数学関数に使用される構文と同様に、引数を括弧で囲む必要があります。代入 (変数へのデータのコピー) の構文は、コンピュータ用の従来のプログラミング言語のほとんどと比べて変わっています。等号を使用する BASIC のような let 文やalgolのような演算子を使用するのではなく、TI-BASIC では、構文: source → destination:=で右矢印演算子を使用します。これは、1970 年代後半から 1980 年代前半に最初の量産向け日本製英数字電卓が登場して以来、カシオ、キヤノン、シャープなどの日本製電卓でよく見られる構文に似ています。
sto→
制御フロー
制御フローステートメントには、 if-then-else ブロック、for ループ、while ループ、repeat ループが含まれますが、switch ステートメントは含まれません。 主な制御フロー ステートメントは次のとおりです。
条件 それから ... それ以外 ... 終わり For(変数、開始、停止、ステップ) ... 終わり 条件 ... 終わり 繰り返し条件 ... 終わり
高級言語としては珍しく、TI-BASIC の実装には、IS> (インクリメントしてより大きい場合はスキップ) ステートメントと DS< (デクリメントしてより小さい場合はスキップ) ステートメントが含まれています。これらは、通常、アセンブリ言語に関連付けられている構造です。プログラムのセクションにはラベルを付けることができますが、特に Z80 モデルでは、ラベルはプログラム ラベルやブロック ラベルとしてではなく、 GotoステートメントまたはMenu(関数の宛先として機能します。
関数とサブルーチンの可用性は実装によって異なります。TI-82 系の計算機で使用可能なバージョンはGOSUBのような関数さえサポートしていませんが、プログラムを相互に呼び出したり、プログラム間で変数を共有したりすることは可能です。TI-89/92 ベースの設計では、共有関数、つまり基本的に値を返すことができるプログラムにアクセスできます。
データ型
TI-BASIC は強力かつ動的に型付けされた言語です。使用可能なデータ型は、68k バージョンと Z80 バージョンで大きく異なります。アセンブリで記述されたライブラリを使用せずに、ユーザー定義のデータ型を作成することはできません。リストは、構造体の代わりによく使用されます。
TI-83/84(Z80)
- 数値変数
A( -Zおよびθ(theta)を含む)。これらにより、実数または複素数(実数のペアとして実装)を浮動小数点形式で格納できます。値の範囲は 1 E -99 から 1 E 99 で、精度は 14 桁ですが、[5]ユーザーに表示されるのは通常 10 桁だけです。ただし、27 個の変数の制限は、リスト、行列、および整数表記法の操作によって拡張できます。リストまたは行列を使用して、個別に参照できる一意の実数変数を含めることができます。整数は、実数の整数部分と小数部分として区切ることで、1 つの実数変数に連結できます。各半分には、iPart コマンドと fPart コマンドを使用して個別にアクセスできます。2 進数値の変数は、基数 2 と基数 10 間の変換によって 1 つの整数として格納できます。 Str0-を含む文字列Str9。メモリが使用可能であれば、任意の数の文字や関数名を格納できます。expr()カタログにある関数を使用して、式として評価できます。- -を含むリスト。追加のリストも作成できます。これらは基本的に、各要素に実数または複素数を格納するために使用される1 次元配列です。リストの次元、つまり要素の数は 1 ~ 999 の範囲ですが、使用可能なメモリが制限要因になる場合があります。リストの次元を以前よりも低く設定すると、末尾の要素は切り捨てられます。高く設定すると、末尾の余分な要素にゼロが埋められます。次元は、リスト名の に有効な数値を格納することによって設定されます。デフォルトのリストの名前は L 1~ L 6ですが、カスタム リストを作成することもできます。これは、でLトークンを使用して参照されるリストの次元を設定し、その後に大文字の-とで始まる 1 ~ 5文字の名前を続けることによって行われます。リストの個々の要素には、リスト名の後に要素番号を括弧で囲んで配置することでアクセスできます。
L1L6dim(ListsAZθ - 行列
[A]( -を含む)[J]。行列の要素にはリストと同じ制限が適用されます。行列の次元は最大 99x99 要素まで定義できますが、使用可能なメモリによって制限されます。ユーザー定義の行列を作成することはできないため、使用できるのは組み込みの 10 個の行列のみです。 - 方程式変数には、- 、- 、、、が含まれます。これらは基本的に方程式を格納する文字列です。式またはプログラムで使用すると、値を返すように評価されます。方程式名 (従属変数、Y) の後に括弧で囲んだ定数値を続けることで、独立変数 (X) に特定の値 (定数、C) を代入できます。以下の例では、「(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" ステートメントの後の 1 行目に表示されている場合、カタログでプログラムを選択したときにステータス バーに表示されます。このようなコメントは、パラメーターの名前やタイプを文書化するためによく使用されます。68k インタープリターには、行の先頭のスペース文字の数を保存する機能が組み込まれており、これによりインデントが可能になります。
機能
TI-83/84(Z80)
TI-BASIC の Z80 バージョンでは、68k のような明示的な「関数」は不可能です。ただし、すべての変数はグローバルなので、別のプログラムを呼び出す前に、引数と同様に変数を設定することで関数をエミュレートできます。戻り値は存在しません。ステートメントはReturn現在のプログラムを停止し、プログラムが呼び出された場所から続行します。
TI-89 (68k)
TI-BASIC の 68k バージョンでは、ユーザー定義関数を作成できます。関数の構文はプログラムと同じですが、 ...の代わりにFunc...キーワードを使用する点と、I/O を実行する命令、非ローカル変数を変更する命令、プログラムを呼び出す命令は使用できません。ただし、関数は、、、またはなどの組み込み関数を呼び出すことができるため、純粋ではない場合があります。すべての関数には戻り値があり、明示的なステートメントがない場合は、最後に評価された式が戻り値になります。
EndFuncPrgmEndPrgmgetTime()getKey()rand()Return
サードパーティの言語拡張機能
サードパーティのアプリケーション(年代順にOmnicalc、[6] xLIB、[7] Celtic、[8] Doors CS)は、 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() :プログラム :ClrIO :ディスプレイ「HELLO, WORLD!」 :一時停止 :ClrIO :ホーム画面 :終了プログラム
TI-Nspire
テキスト「HELLO, WORLD!」
TI-Nspire CX
テキスト「HELLO, WORLD!」
リストとループ
TI-83/84 (Z80シリーズ)
プログラム:リスト :"変数の数を尋ねる :「変数の数」を入力してください。 :"入力を検証するか停止する :A<1またはfPart(A)の場合 :停止 :"リスト内の各値を確認するための FOR ループ :(N,1,A)の場合 :「VAR」と入力、B :"N番目の要素に値を格納する :B→L1(N) :終わり :"最終リストを暗黙的に返す :L1
TI-89 (68k シリーズ)
リスト()
:プログラム
: ローカル n、i、c © ローカル変数 n、i、c を宣言します。
: {}→list © リストを空のリストとして初期化します。
: 「変数の数?」と入力してください。n
: i,1,nの場合
: 「変数#」&文字列(i),c © & を入力すると、i が文字列に変換された後に連結されます。
: c→リスト[i]
: エンドフォー
:終了プログラム
リストには多くの名前を付けることができるため、多くのプログラムで以前のデータを上書きせずに多くのリストを操作できます。TI-82 のリストにはカスタム名を付けることはできません (L 1から L 6は事前にプログラムされています)。TI-85 と TI-86 には、添え字付きの変数名を処理する機能がありません。TI-81 はリストをまったく処理できません。リストは、さまざまな回帰分析など、統計を計算するための多数の組み込み TI-BASIC 関数で使用できます。[1]これらはプログラム内で呼び出すことができますが、実行を一時停止している間も情報が表示され、特定の結果を変数に格納することはできません。
再帰
再帰が可能です。プログラムは、自分自身から、または別のプログラムから呼び出すことができます。
TI-83/84 (Z80シリーズ)
以下の例は階乗を計算するために使用されます。これが機能するには、Xは階乗関数のパラメータであり、 がA1 に等しくなければなりません。
プログラム:ファクト :X=0の場合 :それから :ディスプレイA :停止 :終わり :XA→A :X-1→X :prgm事実
TI-89 (68k シリーズ)
ファクトイ() :プログラム : ローカルn : fact(x)=Func を定義する : x=0の場合 : 戻る 1 : x*fact(x-1) を返す : 終了関数 : 「数字を入力してください」と入力してください。n : 表示 "n! = " : 事実を伝える(n) :終了プログラム
機能
68k シリーズでは、プログラムと関数を区別しています。関数はプログラムと似ていますが、非ローカル変数の変更を含む I/O を実行するステートメントを許可せず、明示的なステートメントがない場合にReturn最後に評価された式である値を返すという点が異なります。
事実(x) :関数 : x=0の場合 : 戻る 1 : x<0の場合 : undef を返す : x*事実(x-1) :終了関数
エディターとツール
1990 年代にグラフ電卓を趣味とするコミュニティが成長したことで、共有とコラボレーションが生まれ、メーリング リストやディスカッション フォーラムで TI-BASIC コードを共有する必要性が生じました。最初は、電卓の画面からコンピュータに TI-BASIC コードを手動で入力するか、逆にプログラムを手動で電卓に入力していました。TI-BASIC プログラムはトークン化された形式で保存されるため、標準的なコンピュータ テキスト エディタを使用して編集することはできません。そのため、電卓プログラミング コミュニティが成熟するにつれて、自動コンバータの必要性が生じました。Texas Instruments の TI-GraphLink アプリケーションによって生成された、コンピュータに保存された TI-BASIC プログラムの形式は最終的にデコードされ、これらのファイルを操作するためのサードパーティ ツールが作成されました。TI は、TI-GraphLink リンク プログラムの特定のリリースに組み込む BASIC エディタを作成しましたが、広く使用されることはありませんでした。特に、フォーラムにコピーして貼り付けると適切に表示されないカスタム文字セットが使用されていました。
2005年、ジョー・ペンナはTI-GraphLinkエディタのテキストを標準のUnicodeに変換するトランスレータツールであるOptiBASICを作成しました。このプロジェクトはすぐに正規表現ベースのTI-BASICオプティマイザを含むように拡張されました。[9]それとは別に、 Cemetechのクリストファー・「カーム・マーティアン」・ミッチェルは、トークン化されたTI-BASICプログラムからプレーンテキスト(後にHTMLおよびBBCode形式)コンテンツを抽出するオンラインコンバータの作成を開始しました。 [10]これは、オンラインプログラムエディタ、エクスポータ、およびTI-83 Plusエミュレータを含むように拡張されました。[11] SourceCoderプロジェクトは2005年末にOptiBASICを吸収しました。現在使用されている他の主要なTI-BASICエディタは、ショーン・「マースソフト」・マクフォールによって作成されたTokenIDE(または「トークン」)のみです。オフラインエディタであるTokensは、TI-BASICプログラムのインポート、編集、エクスポートが可能で、プログラムのサイズと正確さを追跡するツールが含まれており、スプライト/画像エディタなどの補助機能も提供しています。XMLファイルに保存されたトークン定義を中心に構築されており、ユーザーが指定したトークンマッピングで動作するように拡張できるように設計されています。[12]
NSprireシリーズやTI 92 plus、Voyage 200電卓のプログラムは、フラットなクリアテキスト(Ansi/Ascii/ISO 8859-*)形式で転送および保存することができ、TI電卓プログラミング用のIDEがいくつかあります。TI電卓では、 TextPad構文定義、コードスニペット、チャートのシリーズが利用可能で、構文定義はZeusエディタで使用される形式に変換されています。[13] [14] クリアテキスト形式は、電卓のLuaインタープリタでも使用されます。
TI BasicのTI89-92-Voyage 200バリアント用のPC側インタープリタを開発するための独立したプロジェクトが存在し、これにより、電卓用のプログラムを直接実行できるほか、このインタープリタを呼び出す他の言語の複合プログラムも実行できるようになります。インタープリタは、Windowsのコンソールモードで標準入力、出力、エラー、指定可能なログファイルと構成ファイルを使用します。また、電卓で使用されるグラフィックスを複製する2番目のプログラムは、Tcl、Perl、Rexx、C、およびその他の言語に統合されているTkツールと同じように、インタープリタに関連付けられます。VBScriptで使用するTkタイプのツールを開発する関連プロジェクトが、このツールのソースです。[15] VBAおよびWSHエンジンを介してPC側のTI Basicをスプレッドシートおよびデータベースプログラムと統合する3番目のツールも構想されています。このプロジェクトには、電卓側のUnixスタイルのシェルとRexxおよびPerlインタープリタ、Fortran 77インタープリタ、さらにカシオ、HP、シャープ、テキサスインスツルメンツのさまざまな電卓プログラミング言語間およびそれらのプログラミング言語とさまざまなスクリプト言語間のコンバータも含まれています。[15]
参照
参考文献
- ^ ab 「TI-84プラス」。education.ti.com。
- ^ https://education.ti.com/educationportal/sites/US/productDetail/us_ti89ti.html?bid=5 TI-89(education.ti.com)
- ^ 「Lua スクリプト」。education.ti.com。2011年 6 月 5 日閲覧。
- ^ https://tibasicdev.wikidot.com/timings さまざまなコマンド時間の分析。
- ^ TI-83 Plus 開発者ガイド(PDF) (第 3 版)。Texas Instruments Incorporated。2002 年 5 月 28 日。pp. 22–23。
- ^ ticalc.org. Omnicalc v1.00 リリース
- ^ エヴァンス、トラヴィス。xLIB、パトリック・プレンダーガスト著
- ^ サザーランド、ニッキー。ドアの中にオアシスを見つける CS 7.0
- ^ 「Cemetech – United-TI アーカイブ – プロジェクトのアイデア/新しいプロジェクトの開始 – opTI-BASIC [トピック]」。UnitedTI の Cemetech アーカイブ。2012年 8 月 5 日閲覧。
- ^ Michael Vincent. 「Martian が SourceCoder を開発し、BASIClings を制覇」. ticalc.org . 2012 年 8 月 5 日閲覧。
- ^ Travis Evans. 「Cemetech の SourceCoder が更新されました」. ticalc.org . 2012 年 8 月 5 日閲覧。
- ^ Ryan Boyd. 「TokenIDE / Shaun McFall インタビュー」. ticalc.org . 2013 年 1 月 18 日閲覧。
- ^ TextPadサイト
- ^ プログラミング - ticalc.org
- ^ abc 「今日の電卓プログラミング」、スプレッドシート第6巻、第14号、2004年11月23日、pp 5
外部リンク
- テキサスインスツルメンツの公式ウェブサイト
