J (lenguaje de programación)

El lenguaje de programación J, diseñado por Kenneth Iverson y Roger Hui en los '90, es una síntesis de los lenguajes de programación APL (diseñado también por Iverson) y los lenguajes funcionales FP y FL creados por John Backus (famoso por FORTRAN, ALGOL y BNF).

Para eliminar el problema generado por el uso de un juego de caracteres especiales en APL, J sólo requiere el juego de caracteres básicos ASCII. Se usan tanto el punto como los dos puntos para extender el significado del juego de caracteres disponible.

Dado que se trata de un lenguaje de programación de array, J es muy conciso y potente, y es útil para crear programas en los campos de las matemáticas y de la estadística, especialmente cuando involucran operaciones con matrices.

De la misma manera que los lenguajes FP/FL, J soporta Programación a nivel de funciones (también conocida como programación funcional de alto orden), gracias a sus características de programación tácita (nótese que la programación a nivel de funciones no es lo mismo que programación funcional).

A diferencia de muchos lenguajes que soportan la programación orientada a objetos, el flexible esquema de espacio de nombres jerárquico del lenguaje J (donde cada nombre existe en un ámbito particular) puede ser usado con efectividad como un marco de trabajo para realizar programación orientada a objetos basada tanto en clases, como en instancias.

J es un lenguaje de programación no von Neumanniano, que sin embargo permite que el programador use el estilo de programación von Neumann a conveniencia.

Nótese que el lenguaje de programación J no está relacionado con J++, ni su nueva versión J# (una versión propietaria del Lenguaje de programación Java desarrollada por Microsoft).

Ejemplos

J es un lenguaje de programación extremadamente potente, y sus programas pueden ser muy tersos, pero incluso más crípticos.

El programa 'Hola Mundo' en J es:

   'Hola Mundo'

Esta implementación de 'Hola Mundo' refleja el uso tradicional de J -- los programas son introducidos durante una sesión del intérprete J, y los resultados de las expresiones se muestran de modo interactivo. También es posible hacer que scripts en J se puedan ejecutar como programas independientes, pero los mecanismos usados para asociar el script con el intérprete son dependientes del sistema. En un sistema Unix, se podría hacer como sigue:

  #!/bin/jc
  echo 'Hello, world!'
  exit ''

Sin embargo, estos mecanismos no son usados por muchos programadores expertos de J.

A continuación se muestra un programa J que calcula la media de una lista de números:

      avg =. +/ % #
      avg 1 2 3 4
  2.5

'#' - cuenta el número de elementos en la cadena. '+/' - suma todos los elementos de la cadena. '%' - divide la suma de los elementos por el número de elementos.

Ahora generaremos algunos números aleatorios y calcularemos su media:

     a =. ?20$100
     a
  31 16 60 64 64 71 13 3 76 26 25 77 68 48 42 91 99 97 99 9
     avg a
  53.95
  

Sigue una implementación del algoritmo quicksort, sacada del diccionario de funciones de J:

sel=: adverb def 'x. # ['

quicksort=: verb define
 if. 1 >: #y. do. y.
 else. 
  (quicksort y. <sel e),(y. =sel e), quicksort y. >sel e=.y.{~?#y.
 end.
)

La siguiente expresión (Roger Hui) calcula los primeros n dígitos de pi, y demuestra la capacidad de J de usar precisión extendida:

 n=.50                                           NB. asigna a n el número de dígitos requerido.
 <.@o. 10x^n                                     NB. precisión extendida 10^nth * pi
314159265358979323846264338327950288419716939937510

Puede encontrar también una implementación en J del http://ww2.lafayette.edu/~reiterc/j/vector/vlife_index.html

Other Languages