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.