Misez p'tit Optimisez en version APL

Vous ne possédez pas l'original ? Découvrez la machine via l'émulation !

Modérateur : Politburo

Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 498
Enregistré le : 05 mars 2020 20:45
Contact :

Re: Misez p'tit Optimisez en version APL

Message par Schraf »

Quand tu dis "Mais on ne peut pas simuler une loi de distribution.", c'est que la brique de base (random) utilise un générateur de nombres pseudo-aléatoires c'est ça ? Parce que si l'on arrive ou arrivait à simuler une variable aléatoire uniforme sur [0;1] avec des tirages indépendants, on peut bien simuler tout un tas d'autres distributions non ?

Dans le livre "Modèles et algorithmes Markoviens", Bernard Ycart écrit "La construction des générateurs pseudo-aléatoires, ou comment coder efficacement une fonction Random. C'est un pb que nous considérons arbitrairement comme résolu par Margasalia et Zaman bien qu'une littérature importante continue à se développer sur la question".

Sinon, oui, en ayant les résultats de simulations on peut effectuer des tests pour savoir s'il est acceptable de les comparer à une distribution théorique.
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 498
Enregistré le : 05 mars 2020 20:45
Contact :

Misez rikiki, optimisez : le PGCD

Message par Schraf »

Enoncé de l'exercice http://www.silicium.org/forum/viewtopic ... 46&t=33468
Entrée : deux entiers naturels en mémoire ou sur la pile. On a le droit de les écraser.
Sortie : le PGCD !
Comme en APL il y a déjà la fonction PGCD

Code : Tout sélectionner

      208 ∨ 351
13
on va plutôt reprendre la conversation entre @C.Ret et @Gege :
C.Ret a écrit :
J'ai aussi une question, est-ce que le code suivant est valide sur une CASIO :
Lbl 1:
A-BInt(A/B->A)->B:
B!=0=>Goto 1:
A

Réponse : non.
Ce genre de chose n'est possible que sur un langage à ma connaissance et c'est l'APL.
Version 1 : Je n'arrive à trouver qu'une version utilisant modulo mais l'idée des affectations successives est bien là :

Code : Tout sélectionner

[0] A PGCD B
[1] → (B← (A← B) | A) / 1   ⍝ On boucle sur la ligne tant que B n'est pas nul
[2] A
      351 PGCD 208
13
Les valeurs de A et B sont successivement :

Code : Tout sélectionner

  B   A
208 351
143 208
 65 143
 13  65
  0  13
Comme la boucle est à la ligne 1 et que × donne le signe d'un nombre (1 si >0, -1 si <0 ou 0), on peut encore simplifier l'écriture :

Code : Tout sélectionner

A PGCD B
 →⍳×B← (A← B) | A   ⍝ On aura ⍳1 =1 si B est >0 et ⍳0 = vecteur vide quand B = 0, on passe alors à la ligne suivante
 A
Version 2 récursive :

Code : Tout sélectionner

      PGCD← {⍵ = 0:⍺ ⋄ ⍵ PGCD ⍵|⍺}
      351 PGCD 208
13
Version 3 : revenir à la définition qui est de chercher le plus grand diviseur commun entre les 2 nombres

Code : Tout sélectionner

      div← {(0 = (⍳⍵) | ⍵) / ⍳⍵}   ⍝ On filtre les entiers 1,2... N en ne gardant que les diviseurs de N
      div 208
1 2 4 8 13 16 26 52 104 208  ⍝ Diviseurs de 208
On peut aussi utiliser :

Code : Tout sélectionner

      div← {∪ ⍵ ∨ ⍳⍵}
      div 351
1 3 9 13 27 39 117 351
      div← ∪ ⊢ ∨ ⍳   ⍝ Ou même cette version...
      div 351
1 3 9 13 27 39 117 351
Les diviseurs communs sont dans l'intersection :

Code : Tout sélectionner

       (div 208) ∩ div 351
1 13
Et on veut le plus grand, d'où :

Code : Tout sélectionner

      pgcd← {⌈/ (div ⍺) ∩ div ⍵}
      208 pgcd 351
13
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 498
Enregistré le : 05 mars 2020 20:45
Contact :

Ordinateur central Burroughs B5500 et notations simplifiées

Message par Schraf »

Au début des années 70, l'ordinateur central Burroughs B5500 de l'université de Washington permettait à des utilisateurs d'utiliser le langage APL par l'intermédiaire de terminaux (on parle alors de mainframe, c'est-à-dire une unité centrale avec un réseau de terminaux). Voici la bête :
B5500
B5500
B5500.jpg (41.5 Kio) Vu 16251 fois
Vous pouvez voir d'autres très belles photos ici : http://www.retrocomputingtasmania.com/h ... 00_gallery
En savoir plus sur la société Burroughs : https://fr.wikipedia.org/wiki/Burroughs_Corporation

Les notations symboliques d'Iverson ont été traduites pour être compatibles avec les claviers classiques des terminaux :
APL B5500
APL B5500
APLB5500.jpg (127.53 Kio) Vu 16251 fois
Toute la table page 9 de ce document : https://dada.cs.washington.edu/research ... -09-04.PDF

Et comme nous sommes dans la rubrique "Emulateurs", il en existe un : https://retro-b5500.blogspot.com/
Avatar du membre
meridian
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 1151
Enregistré le : 29 oct. 2014 05:08
Localisation : Seine-Saint-Denis

Re: Ordinateur central Burroughs B5500 et notations simplifiées

Message par meridian »

Schraf a écrit : 02 juin 2020 12:06 Voici la bête :
Elle a pourtant l'air sympathique la dame au milieu :mrgreen:

Merci pour cet émulateur, je vais pouvoir refaire de l'Algol :D
cgh
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 2136
Enregistré le : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: Misez p'tit Optimisez en version APL

Message par cgh »

Merci pour toutes ces informations. Ce fil est extremement interessant :geek:
Il y a ceux qui voient les choses telles qu'elles sont et se demandent pourquoi, et il y a ceux qui imaginent les choses telles qu'elles pourraient être et se disent... pourquoi pas? - George Bernard Shaw
J'adore parler de rien, c'est le seul domaine où j'ai de vagues connaissances ! - Oscar Wilde
Ce n'est pas parce que les choses sont difficiles que nous n'osons pas. C'est parce que nous n'osons pas que les choses sont difficiles. - Sénèque
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 498
Enregistré le : 05 mars 2020 20:45
Contact :

Micro-ordinateur TRS-80 et l'APL80

Message par Schraf »

Introduits entre 1977 et 1984, les TRS-80 Model I, II, III et 4 (ainsi que la version portable 4P) sont des micro-ordinateurs tournant avec un microprocesseur Z80.

Photo Wikipédia :
TRS-80 Model I
TRS-80 Model I
TRS80Model_1.jpg (136.15 Kio) Vu 16222 fois
Ils sont programmables nativement en BASIC mais il existait également au moins 3 adaptations d'APL (disons un sous-ensemble des fonctionnalités) pour ces machines : APL-80 par Softside Inc, APL-80 (même nom !) pour le TRS-80 Model III par Phelps Gates (vers 1982-1983) et APL*PLUS/80 par STSC.

Publicité de STSC https://archive.org/details/80-microcom ... page/n153/
Photos du floppy disk et de la carte de référence du APL*PLUS/80 de STSC en bas de cette page : https://www.dyalog.com/50-years-of-apl/ ... allery.htm
Publicité STSC
Publicité STSC
Teach.jpg (100.32 Kio) Vu 16219 fois
Bien sûr il a fallu adapter les positions des symboles APL pour un clavier classique, voici ceux choisis par Phelps Gates :
Correspondance des touches TRS-80 et APL80
Correspondance des touches TRS-80 et APL80
APL80.jpg (35.92 Kio) Vu 16222 fois
Et redéfinir les codes :
Symboles APL80
Symboles APL80
symboles.jpg (35.51 Kio) Vu 16222 fois
Le manuel complet ici : https://archive.org/details/APL80_19xx_ ... es-Ramware

Il est possible de tester ce programme en ligne sur l'émulateur de Peter Phillips : https://willus.com/trs80/?-a+-10+-p+518+q=Apl
Et si vous avez un émulateur local, vous trouverez le fichier APL-80 v3.0 (518) ici : https://willus.com/trs80/?q=Apl
Exemples
Exemples
Exemples APL80.jpg (26.96 Kio) Vu 16222 fois
Les exemples sont :

Code : Tout sélectionner

      1 2 3 +.× 4 5 6   ⍝ Produit interne 1*4 + 2*5 + 3*6. On tape "x" minuscule pour "×"
32
      !10               ⍝ 10*9*...*2*1 
3628800
      ?2 2 ⍴ 6          ⍝ Matrice de nb aléatoires. "p" minuscule pour "⍴"
3 1
5 3
      2 ⊥ 1 1 0 1       ⍝ Conversion du nombre binaire 1101 en base 10. "b" minuscule pour "⊥"
13
      ∇ IMP N           ⍝ Définition d'une fonction
[1]  1 + 2×⍳N
[2]  ∇
      IMP 10
3 5 7 9 11 13 15 17 19 21
Avatar du membre
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6167
Enregistré le : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: Misez p'tit Optimisez en version APL

Message par Marge »

Merci, Éric, même si j'ai vraiment du mal à tout suivre, je trouve comme d'autres ce fil diablement intéressant : bonne continuation !
3 hommes, 3 demis, un 3a... Magnéto, Serge !

Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67
__: A L I E N .

« Boris », c'était juste Maurice enrhumé.
EmmanuelC
Fonctionne à 300 bauds
Fonctionne à 300 bauds
Messages : 96
Enregistré le : 03 mai 2014 09:10
Localisation : IDF

Re: Misez p'tit Optimisez en version APL

Message par EmmanuelC »

C'est délicieusement compliqué et, de ce fait, tentant... Mais pour moi ce sera pour (bien) plus tard. Bravo pour cette série, Éric !
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 498
Enregistré le : 05 mars 2020 20:45
Contact :

IBM 5110 - Très bon émulateur en ligne

Message par Schraf »

Merci pour vos commentaires ! Protégez-vous sinon vous risquez comme moi d'attraper le virus nommé APL ! :P :P

Description Wikipédia de la machine :
L'IBM 5100, lancé en 1975 - donc deux ans avant l'Apple II - est le premier ordinateur personnel commercialisé par IBM. Transportable, il était muni d'un écran texte monochrome cathodique de très petite taille (diagonale de 5 pouces)
En savoir plus : https://fr.wikipedia.org/wiki/IBM_5100_et_5110
Notez le switch BASIC - APL (2e bouton en haut à droite)
Notez le switch BASIC - APL (2e bouton en haut à droite)
IBM5110.jpg (84.9 Kio) Vu 16173 fois

Photo d'origine : https://www.facebook.com/31411232194892 ... =3&theater

Une vraie machine était en vente 8000 $ il y a quelques temps sur ebay... d'où ma suggestion :

Utilisation de l'émulateur de Norbert Kehrer : http://members.aon.at/nkehrer/ibm_5110/emu5110.html
  • Cliquez sur APL puis RESTART pour passer du BASIC à l'APL :D
  • Vous pouvez en partie utiliser votre clavier physique (par exemple SHIFT+Q donnera le "?", SHIFT+R le "⍴" etc.)
Ecran 1 avec des symboles directement accessibles au clavier
Ecran 1 avec des symboles directement accessibles au clavier
ecran1.png (13.54 Kio) Vu 16173 fois

Là où ça devient (assez) génial, c'est pour obtenir des symboles composéscomme ⍋⍒⌹⌽!⍟ :
  • Tapez A puis Backspace pour avoir la flèche d'affectation et tapez quelques nombres : A←5 8 1 3 17 6
  • Pour obtenir ⍋ vous faites : SHIFT+M pour afficher "|" ensuite flèche vers la gauche pour revenir sur le caractère et SHIFT+H pour ajouter le triangle par-dessus !!
  • Même technique avec SHIFT+K et le point pour avoir "!". SHIFT+M avec SHIFT+O donnent le ⌽
Ecran 2 avec des symboles composés
Ecran 2 avec des symboles composés
ecran2.png (12.75 Kio) Vu 16173 fois

Le code

Code : Tout sélectionner

26 9 ⌹ 2 2 ⍴ 3 5 1 2
7 1
permet de résoudre le système linéaire 3x+5y = 26 et x+2y=9. Le symbole ⌹ s'obtient en faisant ÷, en revenant sur le caractère puis SHIFT+L pour ajouter le cadre ⎕

Pour terminer, exemples de 2 programmes, le premier très simple affiche les N premiers nombres impairs

Ecran 3
Ecran 3
ecran3.png (12.8 Kio) Vu 16173 fois
Et le second était un exercice du concours APL organisé par DYALOG : https://www.dyalog.com/student-competit ... viousYears
Il fallait créer une fonction qui rassemble en début du vecteur le nombre mis à gauche, par exemple 3 MOVE 5 3 1 6 3 3 2 2 9 doit amener tous les 3 au début et garder les autres dans le même ordre, ce qui donne 3 3 3 5 1 6 2 2 9
On peut par exemple créer un vecteur logique avec les éléments du vecteur V qui sont différents du nombre N : ~R←V=N
On ne garde que ceux-là pour la fin : (~R←V=N) / V
Et au début on met autant de fois N qu'il y a de 1 dans R (d'où la somme +/)
J'imagine le candidat arrivant au concours avec son IBM 5110 sous le bras ! :D

Une vidéo promotionnelle : https://youtu.be/6LUYDWYGUS0
L'IBM 5100 en fonctionnement (sans APL), juste pour le bruit : https://youtu.be/dBrwuRweBR0
Manuel APL de l'IBM 5110 : http://www.mirrorservice.org/sites/www. ... ec1977.pdf
Avatar du membre
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 7141
Enregistré le : 31 janv. 2008 14:24
Localisation : Banlieue Paârisienne
Contact :

Re: Misez p'tit Optimisez en version APL

Message par gege »

Bonjour,
Machine légendaire que le 5100 !!
(rien à voir avec ces bouses de PC... :mrgreen: )
J'ai un 5120, son petit(*) frère, mais malheureusement avec seulement le Basic... snif
Faut que je fabrique un APL sur pocket...
Sympa ta rubrique nostalgie / machines sur ce fil (aussi) !
G.E.

(*) petit ouais, il est bien plus gros et lourd : 45 kg !!! 8O
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 498
Enregistré le : 05 mars 2020 20:45
Contact :

Prêt pour les vacances...

Message par Schraf »

@Gege : 45 kg 8O, ça dépasse en une seule machine le poids de l'ensemble de ma collection de pockets ! :D :D

Pour ma part, j'ai adapté le code HTML de l'émulateur de l'IBM 5110 pour que ce soit plus lisible sur une tablette, ça rend pas mal !

IBM 5110 sur tablette
IBM 5110 sur tablette
tablette.jpg (132.88 Kio) Vu 16158 fois
Je découvre aussi qu'en ajoutant des TΔ ou des SΔ on pouvait aussi suivre pas à pas le déroulement des programmes ! On se demande ce qu'on a inventé de plus depuis 50 ans :P

Débogueur APL
Débogueur APL
debug.jpg (83.28 Kio) Vu 16158 fois
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 498
Enregistré le : 05 mars 2020 20:45
Contact :

Version 1.0 pour mobile de l'émulateur IBM 5110

Message par Schraf »

Le clavier d'origine de l'émulateur de Norbert Kehrer n'étant pas vraiment adapté pour les tablettes ou téléphone (et il a fait une inversion sur les touches 9 et 0 du ∨ et ∧), je me suis amusé à en redessiner un en AZERTY :

Version 1.0
Version 1.0
APL_Android.jpg (103.79 Kio) Vu 16131 fois
Rien de très compliqué si vous voulez tenter l'expérience :
  • Dessin du clavier fait dans PowerPoint et export en image
Dessin
Dessin
PowerPoint.png (43.85 Kio) Vu 16131 fois
  • J'utilise (comme l'original) une carte pour définir les actions sur les touches, comme c'est pénible à faire, quelques formules Excel pour générer automatiquement les codes HTML donnant les coordonnées des touches en fonction de la ligne et de la colonne.
Quelques formules Excel
Quelques formules Excel
Excel.png (56.12 Kio) Vu 16131 fois
  • Il ne reste plus qu'à remplacer les nouvelles coordonnées dans le code HTML d'origine
  • Comme je me fiche du BASIC :P , j'ai ajouté set_language(1); juste avant le run(); dans le fichier JavaScript, de sorte que maintenant c'est APL qui se lance au démarrage

Code : Tout sélectionner

set_language(1);
run();

Bien entendu l'ensemble (1 page web + 1 fichier JavaScript) fonctionne hors-ligne. Après, l'idéal serait de rentre tout ça "Responsive web design" mais bon ça peut être suffisant quand on se casse les pieds dans une salle d'attente !
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 498
Enregistré le : 05 mars 2020 20:45
Contact :

Émulateur IBM 5110 : Vidéo spéciale pour forum Silicium

Message par Schraf »

Je pensais qu'écrire le MPO n°53 la suite de Syracuse pour l'IBM 5110 serait facile... mais c'est là où je me rends compte des différences entre l'APL d'origine et l'APL étendu... 8O Il y avait nettement moins de fonctionnalités (La liste est disponible ici pages 89 à 91) et je comprends mieux @Gege qui avait du mal à reconnaitre les scripts compacts que j'ai proposés en solutions ! :oops:

Finalement j'ai réussi à refaire une version simplifiée des graphiques de @C.Ret et je vous propose une petite vidéo (elle fait moins de 2 minutes, accélérée à 125%) qui est intéressante pour voir comment les caractères pouvaient se superposer pour obtenir par exemple ⍟ ou ⌹.

Je vous mets le code qui est tapé automatiquement (avec un petit script JavaScript :D ) et qui sera lancé avec les nombres 27, 16 et 837799 :

Code : Tout sélectionner

     S←SYR N
 S←N
 S←S,N←(0 1+0.5 3×N)[1+2|N]
 →(N>1)/2
 
     S←DEC V
 T←⌈1⌈(⍴V)÷14
 N←⌈(⍴V)÷T
 S←0⍴1
 V←V,N⍴0
LOOP:→(0>N←N-1)/0
 S←S,⌈/T↑V
 V←T↓V
 →LOOP
 
     PLTS N;S;V;M
 N←DEC SYR N
 S←2×(⌊60×(M←⌈/N)⍟N)∘.=V←0,⍳60
 S←S+1+(N÷M÷60)∘.≥V
 ' ⎕∘⌹⌹'[S] 
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 498
Enregistré le : 05 mars 2020 20:45
Contact :

Re: Misez p'tit Optimisez en version APL

Message par Schraf »

J'ai proposé un MPO 106 - Distribution de bonbons pour les pockets. Voici une version en APL pour un IBM 5110 (1978)

Code : Tout sélectionner

∇BONBONS B;T
[1] T←0				⍝ Compteur de tour
[2] →(∧/B=B[1])/6		⍝ Si tous les termes de B sont égaux au premier terme, aller en [6]
[3] B←(¯1⌽B)+B←⌈B÷2		⍝ Division des bonbons par 2 avec valeur plafond puis somme avec sa rotation vers la droite
[4] T←1+T			⍝ Compteur + 1
[5] →2				⍝ Retourner en [2]
[6] ⎕←T,B[1]∇			⍝ Afficher les résultats
Exemple pas à pas :

Code : Tout sélectionner

      BONBONS 1 2 3 4 5
1 1 2 2 3	⍝ Division du nombre de bonbons avec valeur plafond ⌈B÷2
3 1 1 2 2	⍝ Rotation à droite ¯1⌽B du vecteur précédent
4 2 3 4 5	⍝ Somme des 2 vecteurs

2 1 2 2 3	⍝ On recommence ⌈B÷2
3 2 1 2 2	⍝ Rotation à droite
5 3 3 4 5	⍝ Somme des 2 vecteurs
...
3 3 3 2 3
3 3 3 3 2
6 6 6 5 5

3 3 3 3 3
3 3 3 3 3
6 6 6 6 6

6 6	⍝ Résultat final
Version IBM 5110
Version IBM 5110
apl.jpg (23.97 Kio) Vu 9295 fois

Exemple avec 5 enfants : le premier a 1 bonbon, le 2e 2 bonbons... Au bout de 6 échanges, ils auront chacun 6 bonbons.
Exemple avec 100 enfants : le premier a 10 bonbons et les autres aucun. Au bout de 104 échanges, ils auront chacun 6 bonbons (et les mains collantes)

Quelques idées pour tester si tous les éléments d'un vecteur sont identiques :

Code : Tout sélectionner

B ← 6 6 6 6 6		⍝ Notre vecteur pour les tests

      (⌈/B) = ⌊/B	⍝ Le plus grand élément est égal au plus petit
1
      ∧/ B = B[1]	⍝ Tous les termes sont égaux au premier (Càd B[1]==B[1] ET B[2]==B[1] ET...)
1
      (⍋B) ≡ ⍒B		⍝ Les rangs des tris par ordre croissant ou décroissant sont identiques = 1 2 3 4 5 6
1
      1 = ⍴∪B		⍝ L'ensemble B n'a qu'un seul élément
1
Avatar du membre
Schraf
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 498
Enregistré le : 05 mars 2020 20:45
Contact :

Re: Misez p'tit Optimisez en version APL

Message par Schraf »

Enoncé du MPO109

Pour résumer, il s'agit de trouver l'union et l'intersection de 2 nombres représentant des ensembles de chiffres. Zéro symbolisera l'ensemble vide. Exemples :

Code : Tout sélectionner

	1232112 UNION 44551
12345

	1232112 INTER 44551
1
Les versions APLX et Dyalog APL ont les opérateurs dyadiques ∪ et ∩ qui fonctionnent sur les chaines ou les vecteurs :

Code : Tout sélectionner

      ∪ '122221132221' 
123

      ∪ 2 3 4 2 3 
2 3 4

      '32123' ∩ '45261'
212				⍝ Avec répétitions
Sur les anciennes versions d'APL, on peut remplacer l'union de la façon suivante :

Code : Tout sélectionner

      n ← '4544682' 
      n⍳n			⍝ '4' est trouvé à la position 1 dans n, le '5' trouvé à la position 2, les deux '4' à la position 1 etc
1 2 1 1 5 6 7
      ⍳⍴n			⍝ Entiers de 1 jusqu'à la taille de n
1 2 3 4 5 6 7
      (n⍳n) = ⍳⍴n		⍝ On repère les éléments de façon unique
1 1 0 0 1 1 1
      ((n⍳n) = ⍳⍴n) / n		⍝ Et il ne reste plus qu'à faire une sélection (filtrer)
45682
Pour revenir au MPO109, première version simple mais qui ne gère pas le cas de 0 (ensemble vide) :

Code : Tout sélectionner

      UNION ← {∪⊃,/⍕¨⍺⍵}
      1232112 UNION 44551
12345
      1232112 UNION 0
1230
Explications : On transforme ⍺ et ⍵ en chaines (⍕¨), puis concaténation (,/) ce qui va créer une boite :

Code : Tout sélectionner

      123 {,/⍕¨⍺⍵} 456
┌──────┐
│123456│
└──────┘
⊃ permet de récupérer le premier élément puis on applique l'union (∪)

Voici une suggestion pour gérer l'ensemble vide :

Code : Tout sélectionner

UNION ← {⍎'0', ('0' ≠ a) / a ← ∪⊃,/⍕¨⍺⍵}
Explications : Il faut enlever les 0 du résultat a ← ∪⊃,/⍕¨⍺⍵, pour cela on utilise à nouveau une sélection ('0'≠a)/a. Si les 2 arguments ⍺ et ⍵ étaient nuls, le résultat serait une chaine vide. On ajoute donc '0' à gauche et on transforme l'ensemble en nombre (⍎)

Et pour l'intersection :

Code : Tout sélectionner

INTER ← {0 UNION (⍕⍺) ∩ ⍕⍵}
Cliquez ici pour voir 2 exemples
Répondre

Retourner vers « Emulateurs »