El lenguaje J se acerca a las personas

Una característica distintiva del lenguaje J es la capacidad de escribir algoritmos iterativos sin usar explícitamente bucles y recursividad. Por ejemplo, la suma de todos los elementos de la matriz se resuelve como " +/", y el promedio de todos los elementos de la matriz es " +/%#".



Ya se han publicado varias reseñas de J en Habré más de una vez. Por ejemplo en este artículo y en este .



J es un idioma con 30 años de historia y aún se está desarrollando y mejorando. Sin embargo, solo había un "punto blanco" en J: algoritmos iterativos con parada condicional. Para ello, se propuso utilizar la construcción while. emparejado con descanso. y continuar.



Usando while. en J parece redundante e incómodo. Y, además, se hunde gravemente en velocidad en comparación con las formas tácitas.



Y en la novena versión del lenguaje, se agregó una nueva unión F (llamada así por la primera letra de la palabra "pliegue").







A modo de comparación, resolvamos el problema usando while. y usando la nueva unión La

condición es simple: obtener una nueva matriz de la matriz original que contiene los valores duplicados de los elementos. La longitud de la nueva matriz se especifica externamente y puede ser menor que la original.

Primero usando while.



t =: dyad define
c =. 0
i =. i.x
z =. $0
while. -. c = y
do. 
z =. z , (+: (c { i))
c =. >: c
end.
z
)
10 t 5
    0 2 4 6 8


Y ahora la solución usando la nueva unión F.Añadamos que la condición para salir del ciclo se verifica usando el verbo Z:




COUNT =: 6
v=: dyad define
_2 Z: -.* COUNT =: <: COUNT
x
)
'' +: F:. v (i.10)
    0 2 4 6 8


La documentación promete que F. no solo será más conveniente, sino también más rápido mientras. ¡Finalmente, J se está acercando a la gente!



PD: Las personas conocedoras pueden notar que este problema se puede resolver fácilmente sin usar construcciones nuevas y cíclicas. Basta con extraer un subarreglo de la longitud requerida y luego procesarlo en forma tácita. Sin embargo, en problemas reales, a menudo sucede que la longitud del subarreglo no se conoce de antemano y la condición de parada se calcula durante la operación del algoritmo.



All Articles