BQN, un lenguaje de la familia APL dedicado a la programación con matrices, traza una frontera clara entre las operaciones designadas con símbolos propios —las primitivas— y las escritas con palabras. La pregunta de qué merece un símbolo y qué no ocupa el centro del diseño del lenguaje.
El autor, creador de BQN, defiende una tesis personal: una buena primitiva debe ser descubierta más que inventada. Es decir, dos personas que razonaran por separado deberían llegar a la misma operación con idéntica semántica. Las funciones inventadas, en cambio, llevan siempre las marcas de decisiones arbitrarias de su creador, lo que las convierte en candidatas menos adecuadas para símbolos canónicos.
La postura no es absolutista. Se admite cierta ingeniería cuando su único fin es hacer más accesible una funcionalidad primitiva subyacente. Por ejemplo, Range (↕) combina dos funciones primitivas con dominios disjuntos, y Rank (⎉) empaqueta varios números en una lista con un orden arbitrario. El autor las considera levemente desafortunadas, aunque aceptables por la conveniencia que aportan.
Una primitiva de calidad tiende a cumplir varias propiedades que van unidas: utilidad amplia, resultados deterministas, simplicidad estructural y buena compositividad. Las funciones aritméticas básicas (+, −, ×, ÷) son el arquetipo: cualquier civilización capaz de desarrollar programación reinventaría la suma con el mismo significado, lo que explica que la aritmética aparezca simbolizada en prácticamente todos los lenguajes.
La razón de fondo es que las matemáticas imponen estructura sobre sí mismas: los teoremas sobre un objeto restringen el comportamiento de otro. Las primitivas obedecen reglas algebraicas —la resta deshace la suma— y esas reglas permiten transformar una secuencia de operaciones en otra equivalente. Los símbolos, con menos sobrecarga cognitiva que las palabras, facilitan reconocer y reordenar esos grupos, mejorando la capacidad del programador para realizar las transformaciones correctamente.
BQN organiza sus primitivas en tres dominios: aritmética, funciones y matrices. No hay primitivas para espacios de nombres porque estos sirven para organizar código, no para computar; una situación análoga se da en C, donde los punteros sí tienen operadores pero las matrices no. La inmutabilidad de las matrices en BQN las hace especialmente aptas para soportar primitivas.
El texto cierra contrastando el enfoque de BQN con el de lenguajes como Python o JavaScript, que tratan operaciones equivalentes —concatenación, inversión, mapeo— como utilidades estándar y a veces les añaden funcionalidad extra que reduce su compositividad. El autor aboga por un equilibrio más cercano a la tradición simbólica de APL, aunque sin convertir el lenguaje en una bolsa de trucos.
