Este artículo explora una optimización interesante en el lenguaje de programación K, específicamente relacionada con la eliminación de una técnica llamada 'raze'. K es un lenguaje de programación de matriz (array language) conocido por su concisión y expresividad. El problema que aborda el autor, Chrispsn, surge al intentar generar una lista de números primos utilizando una expresión K particular. Originalmente, esta expresión dependía de una función llamada 'raze', que esencialmente aplana listas anidadas en una sola lista. Sin embargo, 'raze' se reveló como una solución alternativa, una especie de 'parche' para un problema subyacente en la forma en que se manejaban las operaciones de multiplicación y combinación de listas.
La clave de la optimización radica en evitar el uso de 'raze' y, en su lugar, explorar alternativas que no dependan de esta técnica. El artículo presenta una primera alternativa que, aunque funcional, resulta más compleja y menos eficiente. La solución final implica una comprensión profunda de los conceptos de 'deep verbs' (verbos profundos) y 'shallow verbs' (verbos superficiales) en K. Los 'shallow verbs' operan sobre listas de índices, mientras que los 'deep verbs' operan sobre estructuras de datos más complejas, como matrices multidimensionales. El objetivo es emular el comportamiento de un 'deep verb' sin tener que depender de la implementación de 'raze'.
La solución final, que aún está en fase experimental en el entorno ngn/k, utiliza una técnica llamada 'deep where', que no existe como verbo nativo en K. 'Deep where' permite filtrar y transformar elementos en una estructura de datos multidimensional de una manera más eficiente que las alternativas disponibles. El artículo detalla la implementación de 'deep where' en ngn/k y sugiere cómo se podría adaptar para lograr el mismo resultado en K. En esencia, la solución implica 'explotar' la estructura de datos en un formato de diccionario para luego aplicar operaciones de verbos superficiales, simulando así el comportamiento de un verbo profundo. Esto permite generar la lista de números primos de manera más eficiente y sin la necesidad de 'raze'. El artículo concluye con ejemplos de código que demuestran la funcionalidad de la solución y abre la puerta a la creación de otras funciones 'deep' en K, como 'deep group' y 'deep find', ampliando así las capacidades del lenguaje.
