+/
", 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.