![]() |
Bienvenue invité ( Connexion | Inscription )
![]() ![]() |
![]() |
![]()
Message
#1
|
|
Macbidouilleur d'Or ! ![]() ![]() ![]() ![]() ![]() Groupe : Membres Messages : 2 486 Inscrit : 29 Aug 2002 Membre no 3 340 ![]() |
Ça faisait longtemps !
Je n'expose pas le contexte dans lequel j'ai trouvé cet exemple, qui affiche une étoile, je vais juste le décortiquer rapidement. CODE ' *' [1 + V∘.≤-V←B,0,⌽B←A,-A←⌽⍳4] * * ** ** *** *** **** **** ***************** *************** ************* *********** ********* *********** ************* *************** ***************** **** **** *** *** ** ** * * La clé de la compréhension du code est juste un produit cartésien : Prenez un vecteur de valeurs numériques, placez le verticalement, puis horizontalement, et remplissez le tableau avec une opération de ligne à colonne, comme pour construire une table de multiplication. Ici le vecteur est : Code V 4 3 2 1 ¯4 ¯3 ¯2 ¯1 0 ¯1 ¯2 ¯3 ¯4 1 2 3 4 Il y a des valeurs négatives avec le signe négatif APL en exposant à gauche du nombre Et l'opération de ligne à colonne est, pour tous les couples de coordonnées valides (i, j), V(i) <= -V(j) ce qui s'écrit ainsi en APL : CODE V∘.≤-V 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 0 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 Ce tableau va servir à indicer une chaîne constituée d'un espace et d'un astérisque ' *', mais comme les indices commencent à 1, il faut ajouter 1 partout. Et le résultat a la même forme que le tableau d'indice. Revenons un peu sur la construction du vecteur V : Code V 4 3 2 1 ¯4 ¯3 ¯2 ¯1 0 ¯1 ¯2 ¯3 ¯4 1 2 3 4 Il est composé de la génération des indices de 1 à 4, inversés par l'opérateur ⌽, qu'on range dans la variable A : Code A←⌽⍳4 A 4 3 2 1 On lui ajoute derrière, sa propre négation, et le tout est rangé dans B: Code B←A,-A B 4 3 2 1 ¯4 ¯3 ¯2 ¯1 Enfin V est construit comme B, suivi de 0, suivi du miroir de B Code V←B,0,⌽B V 4 3 2 1 ¯4 ¯3 ¯2 ¯1 0 ¯1 ¯2 ¯3 ¯4 1 2 3 4 Et finalement, l'indiçage de la petite chaîne par le produit cartésien de la relation V <= -V: Code ' *'[1 + V∘.≤-V]
* * ** ** *** *** **** **** ***************** *************** ************* *********** ********* *********** ************* *************** ***************** **** **** *** *** ** ** * * Ce message a été modifié par Jaypee - 6 Jul 2023, 07:45. |
|
|
![]() ![]() |
Nous sommes le : 15th May 2024 - 19:31 |