studio paquetes org mexico library language j apl k

paquetes - APL contra A versus J versus K?



r packages list (7)

El paisaje de lenguaje de matriz, aunque fascinante, es confuso hasta el infinito. ¿Hay alguna razón para elegir uno de J, K, APL o A? Ninguna de estas opciones parece ser de código abierto: ¿hay versiones de código abierto? Me encantaría expandir mi mente, pero me quedo desconcertado.


Algo a considerar es el vocabulario de los operadores (funciones de orden superior).

APL original solo tiene reducción de último y primer eje ( f/ , f⌿ ), reducción acumulada de último y primer eje ( f/ , f⍀ ), más producto interno y externo ( fg , ∘.g ).

La mayoría de los APL extendidos (por ejemplo, GNU APL, APLX, APL + Win, APL2) solo agregan cada uno de los bucles ( ) y la especificación del corchete del eje ( f[ ... ] ).

J, añadió una plethora (llamada adverbios y conjunciones), pero eliminó los corchetes (tanto del eje como de la indexación), cada operador (a favor del operador de rango más general) y la reducción del último eje (acumulativa).

El ahora desaparecido Sharp APL (SAX) retuvo tanto los operadores tradicionales del último eje como la indexación del paréntesis, al tiempo que agregaba muchos de los nuevos operadores de J.

Dyalog APL se está acercando gradualmente al vocabulario de Sharp APL, pero también ha incorporado operadores exclusivos de J que nunca llegaron a Sharp APL.

La siguiente tabla compara vocabularios de composición J, Sharp APL y Dyalog APL. Las entradas atenuadas están bajo propuesta.


J es una notación matemática ejecutable que se ingresa y se muestra usando caracteres ascii.

También es un Lenguaje de Programación Funcional, Orientado a Objetos, totalmente desarrollado.

La implementación de JSoftware de J (no sé de ninguna otra) no es de código abierto, pero es de uso gratuito.

Aunque el motor no es de código abierto, existe una biblioteca de usuarios activa de código J a la que las personas pueden contribuir.

J tiene una documentación extensa y concisa http://www.jsoftware.com/help.htm y los miembros del foro responden con gusto y rapidez a cualquier pregunta o problema y están dispuestos a ayudar a los nuevos usuarios a orientarse, así como a problemas más avanzados.

En el tema de Código abierto, por cierto, la documentación (especificación) para J es extensa y cualquiera podría, en teoría, crear un proyecto de código abierto para tratar de implementar J si así lo desearan.


Las diferencias entre estos lenguajes son relativamente sutiles. APL "apropiado" tiene las ventajas y desventajas de la notación simbólica original. (Hay cambios menores que se han realizado en el símbolo establecido a lo largo de los años, pero todos son lo suficientemente fieles a la visión original).

El idioma A + está disponible en fuente abierta. Se aleja significativamente de los APL "clásicos", pero es como ellos para mantener la mayor parte del conjunto de caracteres básicos. Mi sensación es que no se ha actualizado con los cambios tecnológicos. Fue un precursor de K.

Los idiomas en la familia de lenguaje de matriz que se han apartado del conjunto de caracteres distintivo de APL incluyen J, K y Nial. Nial usa palabras en inglés en lugar de símbolos, y tiene un intérprete de código abierto llamado Q''Nial. K y J se basan principalmente en símbolos, pero estos se extraen del juego de caracteres ASCII. Sin embargo, las palabras pueden usarse en lugar de símbolos en estos idiomas, simplemente asignando definiciones.

La familia de lenguajes de programación APL ha sido principalmente propiedad desde la aparición inicial de APL como un producto de IBM en 1964. Los lenguajes de matrices propietarios parecen tener más soporte y una evolución más rápida de las nuevas capacidades que las alternativas de código abierto en este momento. No estoy seguro de cómo se comparan todos los competidores, pero Dyalog APL ciertamente ha estado trabajando activamente para promover su implementación del lenguaje como tecnología actual. APL2000 ofrece productos para Unix, Linux y Windows, incluido VisualAPL para .Net. MicroAPL Ltd ofrece APLX.

K es un lenguaje especializado que ya no se comercializa por sí mismo. En cambio, Kx Systems comercializa la base de datos Kdb + y su lenguaje Q (consulta), ambos escritos en K. Es una poderosa herramienta especializada, diseñada para el procesamiento a alta velocidad de datos en tiempo real. Se aleja significativamente del enfoque APL original. Los productos de Kx Systems son caros y sus usuarios trabajan principalmente en finanzas.

APL fue concebido y diseñado principalmente por Ken Iverson. Después de una carrera completa de aplicación y perfeccionamiento de APL en aplicaciones comerciales, recurrió a la tarea de hacer una revisión "racionalizada", una que corrigiera los aspectos del lenguaje con los que se había encontrado insatisfecho a lo largo de los años. Esta nueva versión del tema se llama J. Las diferencias entre J y APL están esbozadas en un documento sobre la wiki de J Software. Un cambio notable es la eliminación de la sintaxis de indexación de matriz. La característica más importante, sin embargo, es la forma tácita, en la que los programas se escriben al componer funciones sin referencia a sus argumentos. Tacit J está estrechamente relacionado con el estilo "sin puntos" que se encuentra en los lenguajes de programación funcionales, pero difiere en que esta forma es fundamental para el lenguaje J. Los símbolos basados ​​en ASCII utilizados en J pueden ser más difíciles de leer que los caracteres APL más distintivos.

Para una persona que desea aprender un lenguaje de matriz, mi consejo es seleccionar entre Dyalog APL, APLX, J y Q''Nial. Dyalog APL (especialmente para Windows) o APLX (especialmente para Linux) son probablemente los mejores para alguien que quiere usar el simbolismo central que es tan distintivo para APL, y que quiere una fuerte conexión con la comunidad APL en su conjunto. J puede ser mejor para aquellos que quieren construir aplicaciones web, o centrarse en las matemáticas (como Project Euler) y especialmente aquellos que están fascinados por el estilo tácito que enfatiza. Q''Nial es lo que escogería si mi prioridad fuera el código abierto, pero solo si esa prioridad no significaba esperar el apoyo de una comunidad activa de SO.

ACTUALIZACIÓN: J 7.01 se ha lanzado con código fuente abierto bajo GPL 3. Además está Kona , una variante de K. Estos aumentan las opciones para los lenguajes de matriz de fuente abierta.

ACTUALIZACIÓN por Tobia: GNU APL está disponible bajo la GPL. Sigue de cerca el último estándar ISO publicado en el lenguaje extendido APL. Es una excelente implementación de APL de código abierto y se está desarrollando y manteniendo activamente. También hay otras implementaciones interesantes, por ejemplo, ngn APL , una implementación sorprendentemente bien presentada y moderna de APL escrita en Coffeescript (que compila a Javascript). Los lenguajes de matriz están vivos y bien en 2015.


Mientras que A + parece (tristemente) ser un proyecto muerto, hay un nuevo intérprete de APL de fuente abierta: GNU APL .


Para agregar algo más de información ...

Hay una versión de código abierto de K llamada Kona Kona

Para q/kdb+ , hay una versión de prueba. http://kx.com/download/

Las principales limitaciones son el tiempo de espera de 2 horas, la memoria de 32 bits, la expiración de la licencia por 3 meses y la licencia misma. Estos no deberían ser demasiado molestos si solo quieres jugar y aprender algo.

Personalmente, encontré que q es la más fácil de usar, ya que KX tradujo los verbos monádicos (un solo argumento) de K a las palabras en inglés y hay una buena cantidad de documentación @ http://code.kx.com . Además, el sistema de base de datos está extremadamente bien pensado y es flexible.


También me quedo perplejo (APL siempre me ha confundido, afortunadamente han pasado 20 o más años desde la última vez que intenté algo con él), pero un poco de búsqueda ha encontrado A +, una versión de código abierto de A:

No tengo idea de que satisfará sus necesidades (o las de cualquier persona).


ELI es un lenguaje de programación de matriz recientemente desarrollado, de libre disponibilidad y multiplataforma. Similar a J yk se basa en el juego de caracteres ASCII. Implementa algunas de las características que (como sé) eran exclusivas de k / q / kdb + como el tipo de datos temporal y el subconjunto de SQL incorporado.