Penser en langage de tableaux
(github.com/razetime)Penser en langage K
- La programmation en K se fait principalement via un REPL.
rlwrapde ngn/k permet de parcourir l’historique avec les touches fléchées, ce qui est utile pour développer de gros programmes.- Les fonctions sont testées dans le REPL avant d’être transférées dans le code réel.
- Le pretty-print de ngn/k renvoie toujours des données K valides et peut être précalculé pour accélérer le programme.
- Les scripts K s’exécutent comme s’ils étaient saisis dans le REPL, et la valeur de retour de chaque ligne est affichée sauf si elle se termine par un point-virgule.
- Les scripts autorisent des définitions sur plusieurs lignes, ce qui améliore la lisibilité.
- Pour enregistrer son travail dans un script et l’utiliser dans le REPL, on peut exécuter le fichier et charger les données avec
\lfile.k. - On peut recharger plusieurs fois un fichier dans le REPL pour écraser les données précédentes.
- L’aide du REPL, accessible via
\, contient diverses commandes utiles.
Simplification de la programmation par tableaux
- La programmation par tableaux est un processus continu de simplification de motifs complexes en motifs plus petits, déclaratifs et plus faciles à lire.
- La manière de simplifier des motifs complexes est discutée en détail dans « Patterns and Antipatterns in APL: Breaking Out of the Beginner's Plateau - Aaron Hsu - Dyalog '17 ».
Transformation en K de la multiplication de matrices
- Il est possible de convertir directement en K l’algorithme itératif de multiplication de matrices tiré d’un article de Wikipédia.
- Le pire exemple de code converti en K nécessite de nombreuses affectations de variables globales, des boucles imbriquées et beaucoup de modifications.
- On peut simplifier le code afin de résoudre ces problèmes un par un.
Simplification de la boucle interne
- Dans la boucle interne,
sumpeut être simplifié en utilisant un fold (/). - Comme
'(each) renvoie un tableau, la variable globaleCpeut être supprimée. - On peut simplifier la boucle en supprimant les variables
i,jetk.
Suppression des boucles et minimisation des variables globales
- Il est possible de supprimer la boucle intermédiaire en faisant correspondre directement lignes et colonnes sans
k. - Pour supprimer
j, on peut associer chaque colonne deBàA[i]. - Pour supprimer
i, on peut utiliser eachleft afin d’associer chaque ligne deAà chaque colonne deB. - Les variables globales ne sont alors plus nécessaires.
Forme finale de la fonction de multiplication de matrices
+(transpose) est coûteux, on peut donc l’éliminer.- Au lieu de multiplier chaque ligne de
xpar chaque colonne dey, on peut effectuer implicitement le même travail en appliquant chaque ligne deBà l’ensemble deA. - On obtient finalement une fonction de multiplication de matrices concise et explicite.
- Le processus de simplification du code passe d’abord par plusieurs étapes, mais il peut devenir plus simple et plus intuitif à mesure que l’on gagne en maîtrise de K.
- La multiplication de matrices est une procédure simple, bien adaptée à la prise en charge des tableaux en K.
- D’autres algorithmes, moins adaptés à K, ainsi que la manière de les traiter, seront abordés dans de futurs chapitres.
L’avis de GN⁺
- Cet article montre comment simplifier et optimiser des algorithmes tels que la multiplication de matrices à l’aide du langage K.
- Le feedback immédiat via le REPL et l’amélioration itérative du code sont des caractéristiques centrales de la programmation en K, ainsi qu’une méthode d’apprentissage utile même pour les ingénieurs logiciel débutants.
- Le processus de simplification du code est important pour améliorer ses compétences en programmation, et cet article l’explique de manière concrète et accessible à travers des exemples précis.
1 commentaires
Avis Hacker News
Plusieurs personnes remettent en question l'utilité et l'intelligibilité des langages à tableaux.
under.function exponents).Les aspects remarquables des langages à tableaux sont nombreux, et la liste ci-dessus n'en est qu'un petit échantillon.
Si vous n'avez jamais entendu parler de la programmation par tableaux et souhaitez une introduction, recommandation de « The Array Cast ».
Découverte d'APL/APL2 dans les années 70 et coup de foudre, mais un attrait encore plus fort pour la capacité à composer des fonctions.
La prise de conscience la plus importante dans l'usage des langages à tableaux :
Question à propos des langages à tableaux : comment effectuer une tâche comme « trouver tous les nombres inférieurs à N pour lesquels la condition P est vraie » ?
lazy evaluation).Expérience avec le langage J : le paradigme des langages à tableaux est biaisé, et il n'est pas certain qu'il soit utile de penser tous les problèmes comme des imbrications de tableaux.
Impression tirée de la résolution de problèmes en K : le langage K est délibérément obscur.
Exemple en J : calcul du produit scalaire de P et Q avec
dot =: +/ . *.La syntaxe de K est plus courte, mais il faut garder en tête beaucoup de contexte implicite sur la manière dont le langage fonctionne.