2011-06-04 19 views
14

Estoy tratando de aprender APL (Kona), y estoy buscando proyectos de ejemplo para poder entender cómo un APL'er experimentado podría organizar su código.¿Hay proyectos de código abierto escritos en APL?

Cualquier proyecto de fuente abierta sería útil, pero no financiero o cualquier cosa que carezca de matemática pesada sería increíble.

+3

Pensé que APL existía específicamente _para_ las matemáticas pesadas - one-liner [tamiz de Eratóstenes] (http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes): '(~ RεR∘. × R)/R ← 1 ↓ ⍳R' – sarnold

+2

Esto no debería cerrarse. La pregunta puede redactarse de forma marginal, pero la respuesta es excelente para un idioma en el que es difícil encontrar buenos recursos. – jdeseno

Respuesta

14

He estado buscando también, y no he encontrado ninguno. APL es un lenguaje muy antiguo; es completamente anterior a todo el movimiento de código abierto. A diferencia de Lisp igualmente viejo (cuya historia incluye mucha investigación de laboratorio de IA y un espíritu de colaboración abierta), la cultura de APL se ha asociado históricamente con IBM, sistemas de tiempo compartido comercial y finanzas. Kevin y yo estamos tratando de cambiar esto con Kona, sin embargo.

Hay un poco de código k en no stinking loops. Sin embargo, algo de eso fue escrito para una versión diferente de k de lo que Kona apunta. Hakan Kjellerstrand también tiene un excelenteK page.

También hay varios libros excelentes de APL/J/K/Q. Lo recomendamos especialmente Kenneth Iverson de un lenguaje de programación, de Henry Rich J para los programadores de C, Q de Jeffry Borror para los mortales (Q es la nueva versión de K de Kx), y APL Gilman & de Rose: un enfoque interactivo. Todos menos el último están disponibles en línea.

Tenga en cuenta que muchas personas usan APL como herramientas matemáticas (como R, mathematica, gnuplot, etc.) en lugar de para programación, per se. (En mi humilde opinión, J es el mejor para eso.) K está diseñado para ser un lenguaje de programación de propósito más general, y se siente como una síntesis de APL, Lisp y C. Sin embargo, es un caso atípico en la familia del lenguaje.

+0

Gracias por las lindas palabras, Scott. Gracias por las lindas palabras, Scott. Otra referencia excelente para (moderna) APL es "Mastering Dyalog APL" de Dyalog. Se puede descargar una versión PDF de http://www.dyalog.com/intro/. Tiene, por supuesto, una inclinación hacia el sistema Dyalog, pero es bastante general. – hakank

+7

De alguna manera, olvidé mencionar mi página de APL: http://hakank.org/apl/. Tiene algunas referencias más, por ejemplo, a algunas colecciones de videos sobre APL. – hakank

+0

Hay una guía de estilo anterior en el sitio de Apter (http://nsl.com/papers/style.pdf). Todos los grandes proyectos K están bloqueados dentro de los bancos. No hay proyectos de código abierto escritos en K hasta donde yo sé. Kona es una oportunidad para cambiar eso. Hay muchas cosas que podrías hacer. Una réplica de memcached o una réplica de Redis sería divertida. Consulte https://github.com/kevinlawler/kona/issues?labels=apps&sort=updated&direction=desc&state=open&page=1 Los nuevos proyectos K deberán establecer nuevas convenciones. – kevinlawler

-12

Si lee this, verá que Kona es "una implementación de código abierto del lenguaje de programación K (K3.2)". Desafortunadamente para ti, si visitas el homepage for the creator of the K Programming Language y buscas debajo de los productos, verás que K parece no ser compatible.

Además, mirando los artículos de Wikipedia tanto para APL como para K, la sintaxis parece ser bastante compleja (por ejemplo, x @> #: 'x se usa para ordenar una lista de cadenas por su longitud). Recomiendo aprender Assembler (a través de nasm, uno de los ensambladores más populares), C++, C, y tal vez Python en lugar de APL o K (ambos parecen no ser compatibles o no se usan).

+3

La sintaxis es mucho menos compleja de lo que parece, solo hay varios operadores que son todos "op a" o "a op (b)". Eso es. x @> #: 'x es x [> #:' x] es x [longitud máxima a menor-índices-de cada x]. O, como dijiste, "ordena las cuerdas por longitud". Si desea ordenar por longitud ascendente, {x @<#: 'x}. ({} es un lambda, los argumentos x, y, yz están implícitos.) – silentbicycle

+2

Y aunque K tiene una sensación muy lisina, la mayoría de las mnemotécnicas del operador provienen de C. ayb es y/min, a | b es o/max, * a es el primero, etc. – silentbicycle

+1

K no es incompatible, simplemente no se anuncia abiertamente en el sitio web de productos Kx. Kdb + y Q, ambos mencionados en dicha página de producto, están construidos sobre K (sobre K4, "versión 4" de K, para ser más precisos). Todos los clientes de Kdb + tienen acceso completo a K. – earl

Cuestiones relacionadas