Dartmouth BASIC revolucionó la programación de computadoras para los no expertos, quienes superaban en níumero a los expertos. Era un lenguaje simple, que usaba palabras en inglés, y dabauna respuesta casi instantánea en los días en que eran comunes y norma los retrasos de horas o días para recibir los resultados.

Estas notas dan un lineamiento del lenguaje a aquelllos familiares con la programación.

Thomas E. Kurtz
2005 October 26

Statements

Había quince declaraciones en el BASIC original

LET ("siendo") introduce la declaración de asignación y es requerido.
PRINT ("imprimir") provee salida impresa libre
END se requería para terminar el programa

READ ("lee") asigna valores a variables a partir de datos internos
DATA ("datos") introduce datos internos

GOTO ("ir a") transfiere el puntero de ejecución a otra declaración de línea numerada
IF ("si") da un GOTO condicional

FOR ("para") Inicia una construcción de bucle
NEXT ("siguiente") Finaliza la construcción de bucle

GOSUB ("ir a subrutina") Hace un GOTO a una subrutina
RETURN ("retorna") Retorna desde el final de la subrutina.

DEF ("define") Introduce funciones definidas por el programador
DIM Permite arreglos de dimensionado
REM ("comenta") Provee un comnetario
STOP ("detiene") Lo mismo que la declaración END

Además, la versión un poco más reciente de Darthmouth BASIC incluía la declaración INPUT.

Expresiones aritméticas

Además de las cuatro operaciones aritméticas estándares, el BASIC incluye elevar a la potencia, cuyo símbolo es ''^''.

Se utilizan las reglas normales de precedencia: Exponenciación, multiplicación y división, suma y resta. Para operaciones múltiples dentro de un grupo se utiliza la asociación izquierda. Por ejemplo

(a - b - c) se entiende equivalente a ((a - b) -c)

Existe una anomalía: un signo menos presedente ''-'' se trata como un negador, y tiene una mayor precedencia que la exponenciación, lo cual es contrario a la práctica algebraica normal. Esto implica que

-x^2 se entiende como (-x)^2

(esto se reparó en las siguientes veresiones del intérprete de Darthmouth)

Toda la aritmética se hacía en coma flotante. En las máquinas GE-225 y GE-235, esto implicaba una precisión del orden de los 30 bits (unos diez dígitos), con un rango exponencial de base 2 de entre -156 y +255.

Funciones

Se proveían diez funciones numéricas.

ABS El valor absoluto
ATN El arco tangente
COS El coseno
EXP El exponencial, ej:  e^x
INT El integral (número entero), truncado a 0)
LOG El logaritmo natural
RND El siguiente número aleatorio
SIN El seno
SQR La raíz cuadrada
TAN La tangente

Los argumentos para las funciones SIN, COS, TAN, y el valor desde el ATN, se daban en radianes.

Se daban mensajes de error cuando los argumentos se iban del rago para las funciones LOG y SQR, aunque SQR proveía las SQR de los valores absolutos.

La función RND necesitaba un argumento falso para pasar el parser de sintaxis. Esto es, se usaba RND(0). El argumetno se ignoraba.

Variables

Los nombres de variables pueden ser una letra sola, una letra sola seguida por un único dígito. Esto proveía 286 variabels posbles para cada programa.

Arreglos

Los elementos de un arreglo se indicaba con una letra sola seguida por un ''('', que puede ser uni o bidimensional. Si no se recurría a una declaración DIM, las dimensiones por defedcto eran 0 a 10 para cada dimensión.

La declaración DIM permitía otros límites superiores, pero siempre se proveía el elemento cero.

Declaraciones PRINT

La declaración PRINT permite varias cantidades, incluyendo cadenas entrecomilladas, separadas por comas ('',''), o punto y coma ('';''). Si se las separaba por comas, el BASIC se movñia al comienzo de la zona de tabulación siguiente. Laz zonas tenían 15 caracteres de ancho. Si se lo hacía por punto y coma, BASIC no se movía pero comenzaba el siguiente ítem en el espacio siguiente.

Los valores numéricos se impriment tanto con un espacio de inicio, o por un signo menos, y con un espacio al final. Por lo tanto, usar los valores numéricos en la declaración PRINT con punto y coma como separadores dejaba al menos un espacio entre los valores. Además, los valores numéricos siempre producían una cantidad de caracteres que eran múltiplos de tres. Por lo tanto,

PRINT 12; 34; 56

imprimía en las teletipos:

12 34 56

Si bien no había tipo de datos de cadena, se permitían las cadenas entre comillas en las declaraciones PRINT. Si en una declaración PRINT se separaba con un '';'' una cadena entrecomillada y un valor numérico, podía omitirse el punto y coma.

Si el material de la línea impresa excedía los 75 caracteres, se introducía automáticamente un caracter de fin de línea. Se puede considerar que el MARGEN del BASIC de Darthmouth era de 75 caracteres.

Funciones Definidas

El usuario podía definir hasta 26 funciones FN nuevas, otorgándoles nombres con letras que iban desde FNA a FNZ. Cada una de tales funciones se introducía en memoria como una definición con DEF. Debía contar exactamente con un argumento. El nombre de la variable utilizado como argumento es distinto de la variable con el mismo nombre en el resto del programa. La definición de función debía ser una única línea que siguiese esta sintaxis:

DEF FNX(X) = <expresión>

La expresión debía contener una X a no ser que el valor de la funincón no dependiera de un argumento; la expresíon podía contener otras variables del programa.

La declaración DEF podía aparecer en cualquier lugar del programa antes de la declaración END

Programas de Ejemplo

100 REM PLOT A NORMAL DISTRIBUTION CURVE
110
120 DEF FNN(X) = EXP(-(X^2/2))/SQR(2*3.14159265)
130
140 FOR X = -2 TO 2 STEP .1
150 LET Y = FNN(X)
160 LET Y = INT(100*Y)
170 FOR Z = 1 TO Y
180 PRINT " ";
190 NEXT Z
200 PRINT "*"
210 NEXT X
220 END

100 REM GUESSING GAME
110
120 PRINT "GUESS THE NUMBER BETWEEN 1 AND 100."
130
140 LET X = INT(100*RND(0)+1)
150 LET N = 0
160 PRINT "YOUR GUESS";
170 INPUT G
180 LET N = N+1
190 IF G = X THEN 300
200 IF G < X THEN 250
210 PRINT "TOO LARGE, GUESS AGAIN"
220 GOTO 160
230
250 PRINT "TOO SMALL, GUESS AGAIN"
260 GOTO 160
270
300 PRINT "YOU GUESSED IT, IN"; N; "TRIES"
310 PRINT "ANOTHER GAME (YES = 1, NO = 0)";
320 INPUT A
330 IF A = 1 THEN 140
340 PRINT "THANKS FOR PLAYING"
350 END

Comandos de Sistema

Aunque no eran parte del lenguaje BASIC, el intérprete de Darthmouth BASIC contenía comandos de operación adicionales, que eran los siguientes:

HELLO Comienza una nueva sesión. Ingresabas el número de usuario.
NEW Comienza un nuevo programa
OLD Carga en memoria un programa desde el almacén (disco)
SAVE Guarda el programa actual al almacén (disco)
REPLACE Reemplaza con el programa actual con el del almacén, sobreescribiendo la versión vieja.
RENAME Renombra el programa actual
CAT Lista los nombres de sus programas salvados (abreviación de CATALOG)
LIST Lista el programa actual
RUN Corre el programa actual
STOP Detiene la ejecución del programa actual (en caso de bucle infinito)
UNSAVE Desgraba el programa actual
SYSTEM Nombra un sistema para activar (limitado por defecto a BASIC o bien ALGOL)
BYE Finaliza la sesión
GOODBYE Lo mismo que BYE

Todos estos comandos podían usarse de forma abreviada introduciendo sus primeras tres letras.

Los comandos NEW, OLD, y RENAME podían seguirse por un nombre de programa. Si no, el sistema preguntaba el nombre del programa. El comando SYSTEM podía seguirse tanto del argumento BASIC como ALGOL. Si no se lo hacía, el sistema operativo preguntaba el nombre del sistema que se quería utilizar (también se podrían abreviar con las primeras tres letras).

Adicionalmente, el comando SPEED permitía especificar la velocidad del teletipo, para una simulación más realista. SPEED 75 dará una velocidad de 75 baudios por segundo.