TI-BASIC — официальное [1] название языка, похожего на BASIC, встроенного в графические калькуляторы Texas Instruments . TI-BASIC — это семейство языков, состоящее из трех различных и несовместимых версий, выпущенных на разных продуктах:
TI редко называет язык по имени, но название TI-BASIC использовалось в некоторой документации для разработчиков. [2] [3]
Для многих приложений это самый удобный способ программирования любого калькулятора TI, поскольку возможность писать программы на TI-BASIC встроена. Также можно использовать язык ассемблера (часто называемый «asm»), и существуют компиляторы C для перевода в ассемблер: TIGCC для калькуляторов на базе Motorola 68000 (68k) и SDCC для калькуляторов на базе Zilog Z80 . Однако оба они являются кросс-компиляторами , не позволяющими программировать на калькуляторе. 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]
Выражения используют инфиксную нотацию со стандартным приоритетом операторов . Многие операторы требуют аргументов в скобках, что похоже на синтаксис, используемый для математических функций. Синтаксис для присваивания (копирования данных в переменную) необычен по сравнению с большинством обычных языков программирования для компьютеров; вместо использования оператора let, похожего на BASIC, со знаком равенства или оператора, похожего на algol:=
, в TI-BASIC используется оператор «стрелка вправо» с синтаксисом: source → destination . Это похоже на несколько японских калькуляторов, таких как Casio, Canon и Sharp, которые часто использовали похожий синтаксис с тех пор, как в конце 1970-х и начале 1980-х годов появились первые японские алфавитно-цифровые калькуляторы массового рынка.sto→
Операторы потока управления включают блоки if-then-else , циклы for , циклы while и циклы repeat , хотя операторы switch отсутствуют . Основные операторы потока управления:
Если условие Затем ... Еще ... Конец Для(переменная,старт,стоп,шаг) ... Конец В то время как состояние ... Конец Повторить условие ... Конец
Необычные для языка высокого уровня, реализации TI-BASIC включают операторы IS> (увеличение и пропуск, если больше чем) и DS< (уменьшение и пропуск, если меньше чем), конструкции, обычно связанные с языками ассемблера . Разделы программ могут быть помечены ; однако, особенно в моделях Z80, метки функционируют как пункты назначения для операторов Goto или Menu(
функций, а не как метки программ или блоков.
Доступность функций и подпрограмм зависит от реализации; версии, доступные на калькуляторах, происходящих от TI-82, даже не поддерживают функцию типа GOSUB , хотя можно вызывать программы друг из друга и совместно использовать переменные между программами. Конструкции на основе TI-89/92 могут иметь доступ к общим функциям, по сути, программам, способным возвращать значение.
TI-BASIC — это строго и динамически типизированный язык. Доступные типы данных значительно различаются между версиями 68k и Z80. Невозможно создать пользовательские типы данных без использования библиотеки, написанной на ассемблере. Списки часто используются в качестве замены для структур .
A
- Z
и θ
(тета). Они позволяют хранить действительные числа или комплексные числа (реализованные как пары действительных чисел) в формате с плавающей точкой . Значения могут находиться в диапазоне от 1 E -99 до 1 E 99 с точностью до 14 цифр, [5] хотя пользователям обычно отображаются только 10 цифр. Однако предел в 27 переменных может быть расширен за счет использования списков, матриц и манипуляций с целочисленной нотацией. Список или матрица могут использоваться для хранения уникальных действительных переменных, на которые можно ссылаться индивидуально. Целые числа можно объединить в одну действительную переменную, обозначив их как целую и десятичную половины действительного числа; затем к каждой половине осуществляется независимый доступ с помощью команд iPart и fPart. Переменные с двоичными значениями могут храниться как одно целое число путем преобразования между основанием 2 и основанием 10.Str0
- Str9
. Они могут хранить любое количество символов или даже имен функций, пока есть доступная память. Их можно вычислить как выражение с expr()
функцией, которая находится в каталоге.L1
L6
dim(
Lists
A
Z
θ
[A]
- [J]
. Их элементы подчиняются тем же ограничениям, что и списки. Их размеры могут быть определены до 99x99 элементов, хотя, опять же, доступная память будет ограничивать это. Невозможно создавать пользовательские матрицы, поэтому можно использовать только десять встроенных.Y0
Y9
r1
r6
u
v
w
Y1
Y1
Типы данных, которыми нельзя манипулировать напрямую, включают:
Pic0
- Pic9
)Image0
- Image9
)prgm
)GDB0
- GDB9
)BLUE
, RED
,..., GRAY
) (всего 15 цветов)Типы данных, которыми нельзя манипулировать напрямую (ввод только их имени в строке приведет к ошибке), включают:
Гибкость в использовании переменных сильно варьируется в зависимости от модели калькулятора. Например, на TI-84 Plus доступны все буквы английского языка, а также тета (Θ).
На TI-83/84 программист может создавать списки, имена которых состоят из пяти символов. Все остальные типы данных ограничены, например, 27 действительных или комплексных переменных и ряд предопределенных имен переменных других типов (например, матрицы должны быть одной из десяти переменных [A]
- [J]
). На TI-83/84 некоторые переменные, такие как Ans
и финансовые переменные, имеют фиксированные адреса в оперативной памяти, что делает их доступными намного быстрее, чем 27-буквенные переменные. Ans
действует как специальная переменная, содержащая результат последнего вычисленного кода. Строка, содержащая только переменную, все равно будет вычислена, и ее содержимое будет сохранено в Ans
качестве результата. Поскольку Ans
переоценивается так часто, чаще всего она используется для хранения очень временных вычислений или для хранения значений, доступ к которым в противном случае был бы медленным, например, элементов из списка. Все переменные являются глобальными.
Напротив, калькуляторы 68k позволяют всем именам переменных иметь до восьми буквенно-цифровых символов, включая греческие . Кроме того, переменные можно группировать в «папки» или делать локальными для программы, объявляя их с помощью Local
оператора.
Программисты Z80 часто начинают строки с " (двойные кавычки), чтобы обозначить комментарий. Строки, начинающиеся с ", на самом деле выполняются, изменяя переменную Ans
, но это не влияет ни на что, кроме производительности, если только Ans
не считывается сразу после этого.
Калькуляторы 68k позволяют программам включать однострочные комментарии , используя © в качестве символа комментария. Если комментарий появляется в первой строке после оператора "Prgm", он отображается в строке состояния, когда программа выбрана в каталоге; такие комментарии часто используются для документирования имен или типов параметров. Интерпретатор 68k имеет встроенную функцию для хранения количества пробелов в начале строки, это позволяет делать отступы .
Версия Z80 TI-BASIC делает явные "функции", подобные функциям в 68k, невозможными. Однако все переменные являются глобальными, поэтому функции можно эмулировать, устанавливая переменные, аналогичные аргументам, перед вызовом другой программы. Возвращаемых значений не существует; оператор Return
останавливает текущую программу и продолжает с того места, где она была вызвана.
Версия TI-BASIC 68k позволяет создавать пользовательские функции. Функции имеют тот же синтаксис, что и программы, за исключением того, что они используют ключевые слова Func
... EndFunc
вместо Prgm
... EndPrgm
, и что им не разрешено использовать инструкции, которые выполняют ввод-вывод, изменяют нелокальные переменные или вызывают программы. Однако функции все еще могут быть нечистыми , поскольку они могут вызывать встроенные функции, такие как getTime()
, getKey()
, или rand()
. Все функции имеют возвращаемое значение, которое при отсутствии явного Return
оператора является последним вычисленным выражением.
Сторонние приложения, в хронологическом порядке Omnicalc, [6] xLIB, [7] Celtic и Doors CS, [8] перегружают функции TI-BASIC на калькуляторах Z80 для предоставления дополнительных языковых функций. Сторонние библиотеки перегружают функции sum()
, и real()
, которые обрабатываются и интерпретируются соответствующими приложениями. Среди дополнительных функций — быстрые процедуры рисования фигур, инструменты спрайтов и тайловых карт, возможности изменения и доступа к программам и НДС, функции построения графического интерфейса и многое другое, большинство из которых обычно ограничены для использования программистами ассемблера. Все функции требуют, чтобы на калькуляторе пользователя присутствовало приложение, такое как Doors CS 7.0, что иногда считается отвлечением от использования библиотек.det()
identity()
Следующие программы при запуске выведут на экран фразу « HELLO, WORLD!
».
:Disp "ПРИВЕТ, МИР!"
(P.S. этот код можно сократить до одной только функции Disp, как в TI-83/84, а hellowld, prgm и endprgm будут сгенерированы автоматически.)
:приветлд():Пргм:ClrIO:Disp "ПРИВЕТ, МИР!":Пауза:ClrIO:DispHome:EndPrgm
текст "ПРИВЕТ, МИР!"
текст "ПРИВЕТ, МИР!"
ПРОГРАММА:СПИСКИ:"СПРОСИТЕ КОЛИЧЕСТВО ПЕРЕМЕННЫХ:Ввод "КОЛИЧЕСТВО ПЕРЕМЕННЫХ?",A:"ПРОВЕРИТЬ ВХОД ИЛИ ОСТАНОВИТЬ:Если A<1 или fЧасть(A):Останавливаться:"ЦИКЛ FOR ДЛЯ ЗАПРОСА НА КАЖДОЕ ЗНАЧЕНИЕ, ЧТОБЫ БЫТЬ В СПИСКЕ:Для(N,1,A):Ввод "VAR ",B:"СОХРАНИТЬ ЗНАЧЕНИЕ В N-НОМ ЭЛЕМЕНТЕ:B→L1(N):Конец:"НЕЯВНО ВЕРНИТЕ ОКОНЧАТЕЛЬНЫЙ СПИСОК:L1
списки():Пргм: Локальные n,i,c © Объявляем локальные переменные n, i и c.: {}→list © Инициализирует список как пустой список.: Ввод "Количество переменных?",n: Для i,1,n: Ввод "Переменная #"&string(i),c © и объединение i после преобразования в строку.: c→список[i]: КонецДля:EndPrgm
Списки имеют множество возможных имен, что позволяет многим программам манипулировать многими списками, не переопределяя предыдущие данные. Списки на TI-82 не могут иметь настраиваемые имена (L 1 - L 6 запрограммированы заранее). TI-85 и TI-86 не имеют возможности обрабатывать имя переменной с индексами. TI-81 полностью не может обрабатывать списки. Списки могут использоваться многочисленными встроенными функциями TI-BASIC для вычисления статистики, включая различные регрессионные анализы и многое другое. [1] Их можно вызывать внутри программ, однако они по-прежнему показывают информацию во время приостановки выполнения и не могут сохранять конкретные результаты в переменных.
Рекурсия возможна. Программа может быть вызвана как изнутри самой себя, так и изнутри другой программы.
Пример ниже используется для вычисления факториалов . Чтобы это работало, X
— это параметр функции факториала, который A
должен быть равен 1.
ПРОГРАММА:ФАКТ:Если Х=0:Затем:Дисплей А:Останавливаться:Конец:XA→A:X-1→X:prgmФАКТ
фактуи():Пргм: Местный н: Определить факт(x)=Функция: Если х=0: Возврат 1: Возврат x*факт(x-1): EndFunc: Ввод "Введите число", n: Дисп "n! = ": Факт дисп.(n):EndPrgm
Серия 68k проводит различие между программами и функциями. Функции похожи на программы, за исключением того, что они не допускают операторов, которые выполняют ввод-вывод, включая изменение нелокальных переменных, и возвращают значение, которое при отсутствии явного Return
оператора является последним вычисленным выражением.
факт(х):Функция: Если х=0: Возврат 1: Если х<0: Возврат неопределенного значения: x*факт(x-1):Конец функции
Рост сообщества любителей графических калькуляторов в 1990-х годах повлек за собой обмен и сотрудничество, включая необходимость обмена кодом TI-BASIC в списках рассылки и на форумах для обсуждения. Сначала это делалось путем ввода кода TI-BASIC с экрана калькулятора в компьютер вручную или, наоборот, путем ввода программ вручную в калькуляторы. Программы TI-BASIC хранятся в токенизированном формате , их нельзя редактировать с помощью стандартных компьютерных текстовых редакторов, поэтому по мере развития сообщества программирования калькуляторов возникла необходимость в автоматизированном конвертере. Формат для хранимых на компьютере программ TI-BASIC, созданных приложением TI-GraphLink компании Texas Instruments, в конечном итоге был декодирован, и для работы с этими файлами были созданы сторонние инструменты. TI создала редактор BASIC, который они включили в некоторые выпуски программы для связывания TI-GraphLink, но он не получил широкого распространения. В частности, он использовал пользовательский набор символов, который не отображался должным образом при копировании и вставке на форумы.
В 2005 году Джо Пенна создал OptiBASIC, инструмент-переводчик для преобразования текста из редактора TI-GraphLink в стандартный Unicode. Вскоре проект расширился и включил в себя оптимизатор TI-BASIC на основе регулярных выражений. [9] Независимо от него Кристофер «Kerm Martian» Митчелл из Cemetech начал создавать онлайн-конвертер для извлечения содержимого в виде простого текста (а позже и в формате HTML и BBCode ) из токенизированных программ TI-BASIC, [10] который расширился и включил в себя онлайн-редактор программ, экспортер и эмулятор TI-83 Plus. [11] Проект SourceCoder поглотил OptiBASIC в конце 2005 года. Единственным другим крупным редактором TI-BASIC, который в настоящее время используется, является TokenIDE (или «Tokens»), созданный Шоном «Merthsoft» МакФоллом. Оффлайн-редактор Tokens может импортировать, редактировать и экспортировать программы TI-BASIC, включает инструменты для отслеживания размера и корректности программ и предлагает вспомогательные функции, такие как редактор спрайтов/изображений. Созданный на основе определений токенов, хранящихся в XML- файлах, он предназначен для расширения для работы с любым указанным пользователем сопоставлением токенов. [12]
Программы на серии NSprire, а также на калькуляторах TI 92 plus и Voyage 200 можно переносить и сохранять в формате простого открытого текста (Ansi/Ascii/ISO 8859-*), и существует несколько IDE для программирования калькуляторов TI. Для калькуляторов TI доступен ряд определений синтаксиса TextPad , фрагментов кода и диаграмм, а определения синтаксиса также были преобразованы в формат, используемый редактором Zeus. [13] [14] Формат открытого текста также используется для интерпретатора Lua на калькуляторе.
Существует независимый проект по разработке интерпретатора на стороне ПК для варианта TI89-92-Voyage 200 TI Basic, который позволит запускать программы для калькулятора напрямую [15], а также комбинированные программы на других языках, которые вызывают этот интерпретатор. Интерпретатор использует стандартный ввод, вывод, ошибки и определяемые файлы журнала и конфигурации в консольном режиме под Windows, а вторая программа для копирования графики, используемой на калькуляторе, будет связана с ним так же, как инструменты Tk, которые интегрированы с Tcl , Perl , Rexx , C и другими языками. Связанный проект по разработке инструмента типа Tk для использования VBScript является источником этого инструмента. [15] Также предполагается третий инструмент, который интегрирует TI Basic на стороне ПК с программами электронных таблиц и баз данных через движки VBA и WSH. Этот проект также включает в себя оболочку Unix-стиля на стороне калькулятора и интерпретаторы Rexx и Perl, интерпретатор Fortran 77, а также конвертеры для перехода между различными языками программирования калькуляторов Casio, HP, Sharp и Texas Instruments, а также между ними и различными языками сценариев . [15]