Le langage J se rapproche des gens

Une caractéristique distinctive du langage J est la capacité d'écrire des algorithmes itératifs sans utiliser explicitement les boucles et la récursivité. Par exemple, la somme de tous les éléments du tableau est résolue comme " +/" 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.



All Articles