TI-BASIC es el nombre oficial [1] de un lenguaje similar a BASIC incorporado en las calculadoras gráficas de Texas Instruments . TI-BASIC es una familia de lenguajes con tres versiones diferentes e incompatibles, publicadas en diferentes productos:
TI rara vez se refiere al lenguaje por su nombre, pero el nombre TI-BASIC se ha utilizado en alguna documentación para desarrolladores. [2] [3]
Para muchas aplicaciones, es la forma más conveniente de programar cualquier calculadora TI, ya que la capacidad de escribir programas en TI-BASIC está incorporada. También se puede utilizar el lenguaje ensamblador (a menudo denominado "asm"), y existen compiladores de C para la traducción al ensamblador: TIGCC para calculadoras basadas en Motorola 68000 (68k) y SDCC para calculadoras basadas en Zilog Z80 . Sin embargo, ambos son compiladores cruzados , lo que no permite la programación en la calculadora. TI-BASIC es considerablemente más lento que el lenguaje ensamblador (porque tiene que ser interpretado ), lo que lo hace más adecuado para escribir programas para resolver rápidamente problemas matemáticos o realizar tareas repetitivas, en lugar de programar juegos o aplicaciones con uso intensivo de gráficos. Algunos libros de instrucciones de matemáticas incluso proporcionan programas en TI-BASIC (generalmente para la variante generalizada utilizada por la serie TI-82/83/84).
Aunque es un lenguaje de programación minimalista en comparación con los lenguajes de programación que se utilizan en las computadoras, TI-BASIC es un factor importante en la comunidad de programación. Debido a que las calculadoras gráficas TI son necesarias para las clases de matemáticas avanzadas en muchas escuelas secundarias y universidades, TI-BASIC a menudo proporciona la primera visión que muchos estudiantes tienen del mundo de la programación.
La sintaxis de todas las versiones de TI-BASIC es algo diferente de las implementaciones típicas de BASIC. El lenguaje en sí tiene algunas capacidades básicas de programación estructurada , pero hace un uso limitado o nulo de espacios en blanco o sangrías. También depende de un conjunto de caracteres no estándar , con caracteres específicos para asignación (la flecha "STO" hacia la derecha, no disponible en la mayoría de los conjuntos de caracteres), raíces cuadradas y cúbicas y otros símbolos matemáticos, así como entrada y almacenamiento en tokens para palabras clave. Todas las instrucciones comienzan con dos puntos, que también funcionan como separador de instrucciones dentro de las líneas. En los modelos TI-83/84, los paréntesis de cierre, corchetes, llaves y comillas se pueden omitir opcionalmente al final de una línea o antes del token STO para ahorrar espacio, aunque a veces es mejor dejarlos. Por ejemplo, en los modelos TI 83/84 la función de bucle for se ejecuta mucho más lentamente sin paréntesis de cierre en ciertas circunstancias. [4]
Las expresiones utilizan la notación infija , con precedencia de operador estándar . Muchas declaraciones exigen argumentos entre paréntesis, similar a la sintaxis utilizada para funciones matemáticas. La sintaxis para la asignación (copia de datos en una variable) es inusual con respecto a la mayoría de los lenguajes de programación convencionales para computadoras; en lugar de utilizar una declaración let similar a BASIC con un signo igual, o un operador similar a algol:=
, TI-BASIC utiliza un operador de flecha derecha con la sintaxis: origen → destino . Esto es similar a varias calculadoras japonesas, como las de Casio, Canon y Sharp, que a menudo han empleado una sintaxis similar, desde que aparecieron las primeras calculadoras alfanuméricas japonesas para el mercado masivo a fines de la década de 1970 y principios de la de 1980.sto→
Las sentencias de flujo de control incluyen bloques if-then-else , bucles for , bucles while y bucles repeat , aunque no sentencias switch . Las principales sentencias de flujo de control son:
Si condición Entonces ... Demás ... Fin Para(variable,inicio,detención,paso) ... Fin Mientras que la condición ... Fin Condición de repetición ... Fin
Las implementaciones de TI-BASIC, algo poco habitual en un lenguaje de alto nivel, incluyen instrucciones IS> (Incrementar y omitir si es mayor que) y DS< (Decrementar y omitir si es menor que), construcciones generalmente asociadas con lenguajes ensambladores . Las secciones de los programas se pueden etiquetar ; sin embargo, en particular en los modelos Z80, las etiquetas funcionan como destinos para instrucciones o funciones GotoMenu(
en lugar de como etiquetas de programa o bloque.
La disponibilidad de funciones y subrutinas depende de la implementación; las versiones disponibles en las calculadoras basadas en TI-82 ni siquiera admiten una función similar a GOSUB , aunque es posible llamar programas desde dentro de otros y compartir variables entre programas. Los diseños basados en TI-89/92 pueden tener acceso a funciones compartidas, esencialmente programas capaces de devolver un valor.
TI-BASIC es un lenguaje de tipado fuerte y dinámico . Los tipos de datos disponibles difieren considerablemente entre las versiones 68k y Z80. No es posible crear tipos de datos definidos por el usuario sin utilizar una biblioteca escrita en lenguaje ensamblador. Las listas se utilizan a menudo como reemplazo de las estructuras .
A
- Z
y θ
(theta). Estas permiten almacenar números reales o números complejos (implementados como pares de reales) en formato de punto flotante . Los valores pueden variar de 1 E -99 a 1 E 99 con 14 dígitos de precisión, [5] aunque normalmente solo se muestran 10 dígitos a los usuarios. Sin embargo, el límite de 27 variables se puede expandir mediante el uso de listas, matrices y manipulación de la notación de números enteros. Se puede utilizar una lista o matriz para contener variables reales únicas a las que se puede hacer referencia individualmente. Los números enteros se pueden concatenar en una única variable real delineándolos como las mitades entera y decimal de un número real; luego se accede a cada mitad de forma independiente mediante los comandos iPart y fPart. Las variables con valores binarios se pueden almacenar como un único entero mediante la conversión entre base 2 y base 10.Str0
- Str9
. Pueden almacenar cualquier cantidad de caracteres o incluso nombres de funciones, siempre que haya memoria disponible. Se pueden evaluar como una expresión con la expr()
función, que se encuentra en el catálogo.L1
L6
dim(
Lists
A
Z
θ
[A]
- [J]
. Sus elementos están sujetos a las mismas restricciones que las listas. Sus dimensiones pueden definirse hasta 99x99 elementos, aunque, nuevamente, la memoria disponible limitará esto. No es posible crear matrices definidas por el usuario, por lo que solo se pueden utilizar las diez integradas.Y0
Y9
r1
r6
u
v
w
Y1
Y1
Los tipos de datos que no se pueden manipular directamente incluyen:
Pic0
- Pic9
)Image0
- Image9
)prgm
)GDB0
- GDB9
)BLUE
, RED
,..., GRAY
) (15 colores en total)Los tipos de datos que no se pueden manipular directamente (escribir solo su nombre en una línea daría como resultado un error) incluyen:
La flexibilidad en el uso de variables varía ampliamente según el modelo de calculadora. Por ejemplo, en la TI-84 Plus , están disponibles todas las letras del idioma inglés, así como theta (Θ).
En la TI-83/84, el programador puede crear listas cuyos nombres tengan hasta cinco caracteres. Todos los demás tipos de datos están limitados, como las 27 variables reales o complejas, y una serie de nombres de variables predefinidos de otros tipos (por ejemplo, las matrices tienen que ser una de las diez variables [A]
- [J]
). En la TI-83/84, ciertas variables como Ans
y las variables financieras tienen direcciones fijas en la RAM, lo que hace que sea mucho más rápido acceder a ellas que a las variables de 27 letras. Ans
actúa como una variable especial que contiene el resultado del último código evaluado. Una línea con sólo una variable se evaluará igualmente y su contenido se almacenará Ans
como resultado. Debido a que Ans
se reevalúa con tanta frecuencia, la mayoría de las veces se utiliza para almacenar cálculos muy temporales o para guardar valores a los que de otro modo sería lento acceder, como los elementos de una lista. Todas las variables son globales.
Por el contrario, las calculadoras de 68k permiten que todos los nombres de variables tengan hasta ocho caracteres alfanuméricos, incluido el griego . Además, las variables se pueden agrupar en "carpetas" o hacerlas locales para un programa declarándolas con la Local
instrucción.
Los programadores del Z80 suelen empezar las líneas con " (comillas dobles) para indicar un comentario. Las líneas que empiezan con " se ejecutan modificando la Ans
variable, pero esto no afecta a nada más que al rendimiento a menos que Ans
se lean inmediatamente después.
Las calculadoras de 68k permiten que los programas incluyan comentarios de una sola línea , utilizando © como símbolo de comentario. Si un comentario aparece como la primera línea después de la declaración "Prgm", se muestra en la barra de estado cuando se selecciona el programa en el catálogo; dichos comentarios se utilizan a menudo para documentar los nombres o tipos de parámetros. El intérprete de 68k tiene una función incorporada para almacenar la cantidad de caracteres de espacio al comienzo de una línea, lo que permite la sangría .
La versión Z80 de TI-BASIC hace imposible la existencia de "funciones" explícitas como las de 68k. Sin embargo, todas las variables son globales, por lo que las funciones se pueden emular configurando las variables, de forma similar a los argumentos, antes de llamar a otro programa. Los valores de retorno no existen; la Return
instrucción detiene el programa actual y continúa donde se llamó al programa.
La versión 68k de TI-BASIC permite crear funciones definidas por el usuario. Las funciones tienen la misma sintaxis que los programas, excepto que utilizan las palabras clave Func
... EndFunc
en lugar de Prgm
... EndPrgm
y que no se les permite utilizar instrucciones que realicen E/S, modifiquen variables no locales ni llamen a programas. Sin embargo, las funciones pueden seguir siendo no puras porque pueden llamar a funciones integradas como getTime()
, getKey()
o rand()
. Todas las funciones tienen un valor de retorno, que en ausencia de una Return
declaración explícita es la última expresión evaluada.
Las aplicaciones de terceros, en orden cronológico Omnicalc, [6] xLIB, [7] Celtic y Doors CS, [8] han sobrecargado las funciones TI-BASIC en las calculadoras Z80 para proporcionar una funcionalidad de lenguaje adicional. Las bibliotecas de terceros sobrecargan las funciones sum()
, real()
, det()
y identity()
, que son manejadas e interpretadas por sus respectivas aplicaciones. Entre las funciones adicionales se encuentran rutinas rápidas de dibujo de formas, herramientas de mapas de sprites y mosaicos, capacidades de modificación y acceso a programas y VAT, funciones de construcción de GUI y mucho más, la mayoría de las cuales están restringidas normalmente al uso de programadores de ensamblaje. Todas las funciones requieren que una aplicación como Doors CS 7.0 esté presente en la calculadora del usuario, lo que a veces se considera una desventaja para el uso de las bibliotecas.
Los siguientes programas, al ejecutarse, mostrarán la frase " HELLO, WORLD!
".
:Disp "¡HOLA, MUNDO!"
(PD: este código se puede acortar a solo la función Disp, como en la TI-83/84, y hellowld, prgm y endprgm se generan automáticamente).
:hollowld():Programa:ClrIO:Disp "¡HOLA, MUNDO!":Pausa:ClrIO:DispInicio:Fin del programa
texto "¡HOLA, MUNDO!"
texto "¡HOLA, MUNDO!"
PROGRAMA:LISTAS:"PIDE EL NUMERO DE VARIABLES:Introduzca "NÚMERO DE VARS? ",A:"VALIDAR ENTRADA O DETENER:Si A<1 o fPart(A):Detener:"UN BUCLE FOR PARA SOLICITAR QUE CADA VALOR ESTÉ EN LA LISTA:Para(N,1,A):Entrada "VAR ",B:"ALMACENA EL VALOR EN EL ELEMENTO N-ésimo:B→L1(N):Fin:"DEVOLVER IMPLÍCITAMENTE LA LISTA FINAL:L1
liza():Programa: Local n,i,c © Declarar las variables locales n, i y c.: {}→list © Inicializa la lista como una lista vacía.:Entrada "¿Número de variables?",n:Para i,1,n:Ingresa "Variable #"&string(i),c © y concatena i después de convertirla en una cadena.: c→lista[i]:FinPara:Fin del programa
Las listas tienen muchos nombres posibles, lo que permite que muchos programas manipulen muchas listas sin anular los datos anteriores. Las listas en la TI-82 no pueden tener nombres personalizados (L 1 a L 6 están preprogramadas). La TI-85 y la TI-86 no tienen la capacidad de manejar un nombre de variable con subíndices. La TI-81 es completamente incapaz de manejar listas. Las numerosas funciones integradas de TI-BASIC pueden usar listas para calcular estadísticas, incluidos varios análisis de regresión y más. [1] Se pueden llamar dentro de los programas, sin embargo, aún muestran la información mientras pausan la ejecución y no pueden almacenar resultados específicos en variables.
La recursión es posible. Un programa puede ser llamado desde sí mismo o desde otro programa.
El ejemplo siguiente se utiliza para calcular factoriales . Para que funcione, X
es el parámetro de la función factorial y A
debe ser igual a 1.
PROGRAMA:HECHO:Si X=0:Entonces:Mostrar A:Detener:Fin:XA→A:X-1→X:prgmHECHO
factui():Programa: Número local:Define fact(x)=Func:Si x=0:Retorno 1: Devuelve x*fact(x-1):Fin de función:Introduzca "Introduzca un número", n: Mostrar "n! = ":Disp hecho(n):Fin del programa
La serie 68k distingue entre programas y funciones. Las funciones son como los programas, excepto que no permiten instrucciones que realicen operaciones de E/S, incluida la modificación de variables no locales, y devuelven un valor que, en ausencia de una Return
instrucción explícita, es la última expresión evaluada.
hecho(x):Función:Si x=0:Retorno 1:Si x<0: Devuelve indefinido:x*hecho(x-1):Fin de función
El crecimiento de la comunidad de aficionados a las calculadoras gráficas en la década de 1990 trajo consigo la posibilidad de compartir y colaborar, incluida la necesidad de compartir el código TI-BASIC en listas de correo y foros de discusión. Al principio, esto se hacía escribiendo a mano el código TI-BASIC desde la pantalla de una calculadora en una computadora o, por el contrario, ingresando los programas manualmente en las calculadoras. Los programas TI-BASIC se almacenan en un formato tokenizado , no se pueden editar utilizando editores de texto de computadora estándar, por lo que a medida que la comunidad de programación de calculadoras maduró, surgió la necesidad de un convertidor automático. El formato de los programas TI-BASIC almacenados en la computadora generados por la aplicación TI-GraphLink de Texas Instruments finalmente se decodificó y se crearon herramientas de terceros para manipular estos archivos. TI creó un editor BASIC que incluyó en ciertas versiones del programa de enlace TI-GraphLink, pero no se ha generalizado su uso. En particular, utilizaba un conjunto de caracteres personalizado que no se mostraba correctamente cuando se copiaba y pegaba en foros.
En 2005, Joe Penna creó OptiBASIC, una herramienta de traducción para convertir texto del editor TI-GraphLink en Unicode estándar. El proyecto pronto se expandió para incluir un optimizador TI-BASIC basado en expresiones regulares. [9] De forma independiente, Christopher "Kerm Martian" Mitchell de Cemetech comenzó a crear un convertidor en línea para extraer contenido de texto simple (y más tarde HTML y BBCode ) de programas TI-BASIC tokenizados, [10] que se expandió para incluir un editor de programas en línea, exportador y emulador TI-83 Plus. [11] El proyecto SourceCoder absorbió OptiBASIC a fines de 2005. El otro editor importante de TI-BASIC actualmente en uso es TokenIDE (o "Tokens"), creado por Shaun "Merthsoft" McFall. Tokens, un editor fuera de línea, puede importar, editar y exportar programas TI-BASIC, incluye herramientas para rastrear el tamaño y la corrección del programa y ofrece funciones auxiliares como un editor de sprites/imágenes. Desarrollado a partir de definiciones de tokens almacenadas en archivos XML , está pensado para ser extensible y funcionar con cualquier mapeo de tokens especificado por el usuario. [12]
Los programas de la serie NSprire, así como de las calculadoras TI 92 plus y Voyage 200, se pueden transferir y guardar en formato de texto claro (Ansi/Ascii/ISO 8859-*) y existen varios IDE para la programación de calculadoras TI. Hay una serie de definiciones de sintaxis TextPad , fragmentos de código y gráficos disponibles para las calculadoras TI, y las definiciones de sintaxis también se han convertido al formato utilizado por el editor Zeus. [13] [14] El formato de texto claro también se utiliza para el intérprete Lua de la calculadora.
Existe un proyecto independiente para desarrollar un intérprete del lado de la PC para la variante TI89-92-Voyage 200 de TI Basic que permitiría ejecutar programas para la calculadora directamente [15] así como programas combinados de otros lenguajes que llaman a este intérprete. El intérprete utiliza archivos estándar de entrada, salida, error y registro y configuración especificables en modo consola bajo Windows, y un segundo programa para replicar los gráficos utilizados en la calculadora estaría relacionado con él de la misma manera que las herramientas Tk que están integradas con Tcl , Perl , Rexx , C y otros lenguajes. Un proyecto relacionado para desarrollar una herramienta de tipo Tk para su uso por VBScript es la fuente de esta herramienta. [15] También se prevé una tercera herramienta que integre la TI Basic del lado de la PC con programas de hojas de cálculo y bases de datos a través de motores VBA y WSH. Este proyecto también incluye un shell estilo Unix del lado de la calculadora e intérpretes Rexx y Perl, un intérprete Fortran 77, así como convertidores para ir y venir entre los diversos lenguajes de programación de calculadoras Casio, HP, Sharp y Texas Instruments y hacia y desde estos y varios lenguajes de script . [15]