Forth, un lenguaje de programación conocido por su flexibilidad, no tiene una implementación estándar de 'arrays' como otros lenguajes. Esto se debe a que Forth facilita la creación de nuevos tipos de datos, permitiendo a los programadores diseñar estructuras que se adapten perfectamente a sus necesidades específicas. En Forth, el término 'array' se refiere a dos tipos principales: arrays indexados y no indexados.
Arrays Indexados: Estos arrays devuelven una dirección de memoria. Dentro de esta categoría, encontramos arrays 'variable-like' (que devuelven una dirección), arrays 'value-like' (que devuelven el valor directamente), arrays de ejecución ('vectors' que ejecutan una acción contenida) y arrays mixtos. La implementación más común es el array 'variable-like' básico, que crea un array unidimensional de elementos de un solo 'cell' (una unidad de memoria). Es importante recordar que la indexación en Forth comienza en 0, por lo que un índice de 3 accederá al cuarto elemento.
Arrays de Elementos Largos: El array básico está limitado a elementos de un solo 'cell'. Para situaciones más complejas, como el desarrollo de un juego (Game 0, en el ejemplo), donde cada 'room' necesita cinco 'cells' (una para la descripción y cuatro para las direcciones), se utiliza long-element-array. Esta función permite crear arrays con elementos de cualquier longitud especificada en tiempo de compilación. La definición long-element-array ( n len -- ) ( i -- addr) crea un array donde 'n' es el número de elementos y 'len' es la longitud de cada elemento en 'cells'.
Subcampos y Desplazamientos (Offsets): Dado que los elementos de un array pueden contener múltiples datos, es necesario un mecanismo para acceder a sus componentes. Esto se logra mediante el uso de 'offsets'. La palabra offset crea desplazamientos, sumando una cantidad específica a la dirección base del array. Antes de definir los offsets, se inicializa la variable current-offset a 0. Cada offset se define según la cantidad de 'cells' que contendrá. Por ejemplo, en Game 0, se definen offsets para la descripción de la habitación (}descriptor), y para las direcciones norte, este, sur y oeste (}north, }east, }south, }west). Es crucial entender que un offset devuelve una dirección, y aún es necesario manipular los datos en esa dirección (por ejemplo, con @ para obtener el valor o execute para ejecutar una función).
En resumen, Forth ofrece una gran flexibilidad en la creación de estructuras de datos que simulan arrays, permitiendo a los programadores adaptar la implementación a sus necesidades específicas. Aunque no existe un array estándar, las funciones array y long-element-array, junto con el uso de offsets, proporcionan las herramientas necesarias para trabajar con datos organizados de manera eficiente.
