Al mismo tiempo que se elaboraban estas construcciones formales, se desarrollaba también la tecnología electrónica, de manera que al confluir ambos procesos, se posibilitó la construcción de las modernas computadoras.
Aunque originalmente las primeras computadoras, se construyeron para
realizar operaciones aritméticas en gran escala, muy pronto fue
evidente que también se podían utilizar para otro tipo de manipulación
de símbolos, porque ciertamente, los números son también símbolos
pero no son todos los símbolos; existen otros -quizá más importantes- de diferente naturaleza.
En efecto, muy rápidamente la computadora comenzó a ser
utilizada en el manejo de información no numérica; principalmente
en el texto escrito y los símbolos de la matemática no aritmética.
Desde las primeras aplicaciones no numéricas, fue posible obtener no sólo
los resultados inicialmente esperados, sino también la consolidación de
ciertos procedimientos de orden general. Tal es el caso de IPL, un conjunto
de subrutinas elaboradas por Newell, Simon y Shaw en el Instituto Tecnológico
de Carnegie orientadas a organizar datos con el empleo de estructuras
distintas a las tablas, en las que las relaciones que guardan con los datos entre sí, son tan importantes como los datos mismos.
De igual forma surge FLPL (Fortran List Processing Language), como una
colección de subrutinas -construidas en Fortran- que permitieron organizar
información en forma de estructuras ramificadas. Aunque debe decirse que
su éxito fue limitado.
No tardaron en surgir verdaderos lenguajes de programación,
entre los cuales merecen mención especial COMIT, desarrollado por
V. Yngre y Lisp (List Processor), desarrollado por John McCarty
- y sus alumnos-, en el Instituto Tecnológico de Massachusetts al
final de los 50's. Lisp se convertiría por antonomasia, en el
lenguaje de las aplicación en inteligencia artificial.
Lisp reunió en su definición pocos conceptos, pero todos ellos
de importancia capital: estructuras ramificadas (árboles binarios
o listas), uso de texto escrito, recursividad y el concepto de
máquina universal. Como puede apreciarse, resulta ser un lenguaje compacto,
consistente consigo mismo.
Lisp incluyó la recursividad, posiblemente porque su autor fue estudiante
de la Universidad de Princeton en donde las ideas de Church, Post y Turing
tenían considerable arraigo y difusión.
Fue también el primer lenguaje que comprendía el concepto de
función universal.
No obstante que fue el lenguaje que mejor potenció la
computación simbólica, dado que su diseño reunió la elegancia,
la flexibilidad y la sencillez, sufrió de algunas deficiencias de
índole pragmática:
La programación involucrada no es difícil, pero la definición
misma de un número es más compleja y profunda que la de un conjunto.
Para un manejo adecuado de la aritmética, los lenguajes deben
distinguir a los números de entre los otros símbolos. La compresión
del concepto número, requiere de sólidos fundamentos en el lenguaje y su
acercamiento conceptual, exige elaborados esquemas matemáticos para su
construcción formal. Y esto lo deben ofrecer de manera que no importunen al
usuario con formas grotescas para indicar la aritmética.