IPB

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> Un exemple vu dans une video, APL et la genèse des PC IBM série 5100 au VCF 2023
Options
Jaypee
posté 5 Jul 2023, 19:09
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.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 27th April 2024 - 08:40