+/
" et la moyenne de tous les éléments du tableau est " +/%#
".
Diverses critiques de J ont déjà été publiées plus d'une fois sur Habré. Par exemple dans cet article et dans celui-ci .
J est une langue avec une histoire de 30 ans et continue de se développer et de s'améliorer. Cependant, il n'y avait qu'un seul «point blanc» dans J - les algorithmes itératifs avec arrêt conditionnel. Pour cela, il a été proposé d'utiliser la construction while. jumelé avec pause. et continue.
Utilisation while. en J semble redondant et maladroit. Et, en plus, il baisse considérablement en vitesse par rapport aux formes tacites.
Et dans la 9e version de la langue, une nouvelle union F a été ajoutée (nommée d'après la première lettre du mot «pli»).
À titre de comparaison, résolvons le problème en utilisant while. et en utilisant la nouvelle union La
condition est simple: obtenir un nouveau tableau du tableau d'origine qui contient les valeurs doublées des éléments. La longueur du nouveau tableau est spécifiée en externe et peut être inférieure à l'original.
Première utilisation 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
Et maintenant la solution utilisant la nouvelle union F.Ajoutons que la condition de sortie de la boucle est vérifiée à l'aide du verbe Z:
COUNT =: 6
v=: dyad define
_2 Z: -.* COUNT =: <: COUNT
x
)
'' +: F:. v (i.10)
0 2 4 6 8
La documentation promet que F. sera non seulement plus pratique, mais aussi plus rapide. Finalement, J se rapproche des gens!
PS Les personnes compétentes peuvent remarquer que ce problème peut être facilement résolu sans utiliser à la fois de nouvelles constructions cycliques. Il suffit d'extraire un sous-tableau de la longueur requise puis de le traiter sous forme tacite. Cependant, dans les problèmes réels, il arrive souvent que la longueur du sous-tableau ne soit pas connue à l'avance et que la condition d'arrêt soit calculée pendant le fonctionnement de l'algorithme.