Suite à un post de FLISZT, je vous propose de reprendre quelques éléments trouvés dans le document de Norman Brenner. Il s’agit de traduire certaines des fonctions APL (sélection, réduction, transformation…) en RPL pour les calculatrices HP-48/49/50G
Création d’un répertoire APL sur les HP
Code : Tout sélectionner
HP 48G : ↱ MEMORY NEW
HP 49/50 : ↰ FILES
Puis :
NAME : APL
☑ DIRECTORY
OK
Code : Tout sélectionner
'APL' ALPHA ALPHA CRDIR
Code : Tout sélectionner
VAR APL
Code : Tout sélectionner
HP 48G : ↱ HOME
HP 49/50G : ↰ UPDIR (ENTER sur HP 49)
Exemple 1 – Compression logique
Ecrire un programme RECUS qui à partir d’une liste (vecteur en APL) de notes d’étudiants renvoie la liste des notes ≥ 10.
Résultat attendu en APL
Code : Tout sélectionner
RECUS 5 12 13 8 17 2
12 13 17
Code : Tout sélectionner
1: {5 12 13 8 17 2}
VAR RECUS
1: {12 13 17}
Code : Tout sélectionner
1 0 1 / 5 12 13
5 13 ⍝ On garde 1er et 3e éléments
Voici la traduction proposée par Norman Brenner pour la Compression Logique que nous noterons CL. (BSEL dans le document initial) :
Code : Tout sélectionner
« 2 « IF NOT THEN DROP END » DOLIST »
'CL. STO # On mémorise le programme
Code : Tout sélectionner
2: {5 12 13 8 17 2} # Notes au niveau 2
1: {0 1 1 0 1 0} # Masque booléen niveau 1
VAR CL. # On lance le programme
1: {12. 13. 17.} # Résultat au niveau 1
Le programme CL. indique qu’il y a 2 listes à traiter. Il prend ensuite la négation de la liste du niveau 1 (Ainsi les 0 deviennent des 1 et réciproquement) et applique DROP pour éliminer les éléments correspondant à 1. Voici 2 exemples illustrant l’utilisation de NOT et DOLIST :
Code : Tout sélectionner
{0 1 1 0 1 0} # Liste de booléens
ALPHA ALPHA NOT
{1 0 0 1 0 1} # Négation
4: {5 3 1 4} # Les listes à traiter
3: {7 2 8 2}
2: 2 # Nb de listes
1: « MAX » # Fonction à appliquer
PRG LIST PROC DOLIST
1: {7. 3. 8. 4.} # Max entre les 2 listes
Code : Tout sélectionner
« DUP 10 ≥ CL.»
'RECUS STO # On mémorise le programme
Code : Tout sélectionner
RECUS ← {(⍵ ≥ 10) / ⍵}
RECUS 5 12 13 8 17 2
Output : 12 13 17
Code : Tout sélectionner
1: {0 1 1 0 1 0}
2: {5 12 13 8 17 2}
PRG BRCH NXT IFT
1: {12 13 17}
Code : Tout sélectionner
« DUP 10 ≥ SWAP IFT »
'RECUS STO
Ceci donne l’idée de simplifier le code CL. proposé par Norman Brenner par :
Code : Tout sélectionner
« SWAP IFT »
'CL. STO
Code : Tout sélectionner
« DUP 8 > CL. DUP 13 < CL.»
'RAT STO # Etudiants allant au rattrapage
1: {5 12 13 8 17 2}
VAR RATT
1: {12}
Code : Tout sélectionner
1: { 1 2.5 3.7 8 4}
VAR ENT
1: {1 8 4}
Code : Tout sélectionner
« DUP DUP IP > NOT CL.»
'ENT STO
En APL :
Code : Tout sélectionner
ENT ← {(⍵ = ⌊⍵) / ⍵}
ENT 1 2.5 3.7 8 4
Output : 1 8 4