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 de l’utilisateur
Schraf
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 60
Inscription : 05 mars 2020 21:45
Contact :

Re: Misez p'tit Optimisez en version APL

Message par Schraf » 01 juin 2020 14:10

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 de l’utilisateur
Schraf
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 60
Inscription : 05 mars 2020 21:45
Contact :

Misez rikiki, optimisez : le PGCD

Message par Schraf » 01 juin 2020 17:10

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 de l’utilisateur
Schraf
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 60
Inscription : 05 mars 2020 21:45
Contact :

Ordinateur central Burroughs B5500 et notations simplifiées

Message par Schraf » 02 juin 2020 12:06

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.jpg
B5500
B5500.jpg (41.5 Kio) Consulté 709 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 :
APLB5500.jpg
APL B5500
APLB5500.jpg (127.53 Kio) Consulté 709 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 de l’utilisateur
meridian
Fonctionne à 1200 bauds
Fonctionne à 1200 bauds
Messages : 786
Inscription : 29 oct. 2014 06:08
Localisation : Seine-Saint-Denis

Re: Ordinateur central Burroughs B5500 et notations simplifiées

Message par meridian » 03 juin 2020 07:55

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 : 1978
Inscription : 30 août 2011 12:23
Localisation : Vous êtes ici -> .

Re: Misez p'tit Optimisez en version APL

Message par cgh » 03 juin 2020 08:18

Merci pour toutes ces informations. Ce fil est extremement interessant :geek:
Mais qu'importe la fin du Monde, c'est juste un changement de décor. - Adamo "Rendez-vous sur Gliese"
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 de l’utilisateur
Schraf
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 60
Inscription : 05 mars 2020 21:45
Contact :

Micro-ordinateur TRS-80 et l'APL80

Message par Schraf » 03 juin 2020 08:56

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 :
TRS80Model_1.jpg
TRS-80 Model I
TRS80Model_1.jpg (136.15 Kio) Consulté 680 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
Teach.jpg
Publicité STSC
Teach.jpg (100.32 Kio) Consulté 677 fois
Bien sûr il a fallu adapter les positions des symboles APL pour un clavier classique, voici ceux choisis par Phelps Gates :
APL80.jpg
Correspondance des touches TRS-80 et APL80
APL80.jpg (35.92 Kio) Consulté 680 fois
Et redéfinir les codes :
symboles.jpg
Symboles APL80
symboles.jpg (35.51 Kio) Consulté 680 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 APL80.jpg
Exemples
Exemples APL80.jpg (26.96 Kio) Consulté 680 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 de l’utilisateur
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 4973
Inscription : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: Misez p'tit Optimisez en version APL

Message par Marge » 03 juin 2020 13:02

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 !

« Boris », c'est juste Maurice enrhumé.

EmmanuelC
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 53
Inscription : 03 mai 2014 09:10
Localisation : IDF

Re: Misez p'tit Optimisez en version APL

Message par EmmanuelC » 03 juin 2020 14:02

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 de l’utilisateur
Schraf
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 60
Inscription : 05 mars 2020 21:45
Contact :

IBM 5110 - Très bon émulateur en ligne

Message par Schraf » 04 juin 2020 10:46

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
IBM5110.jpg
Notez le switch BASIC - APL (2e bouton en haut à droite)
IBM5110.jpg (84.9 Kio) Consulté 631 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.)
ecran1.png
Ecran 1 avec des symboles directement accessibles au clavier
ecran1.png (13.54 Kio) Consulté 631 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 ⌽
ecran2.png
Ecran 2 avec des symboles composés
ecran2.png (12.75 Kio) Consulté 631 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

ecran3.png
Ecran 3
ecran3.png (12.8 Kio) Consulté 631 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 de l’utilisateur
gege
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6796
Inscription : 31 janv. 2008 15:24
Localisation : Banlieue Paârisienne
Contact :

Re: Misez p'tit Optimisez en version APL

Message par gege » 04 juin 2020 13:33

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 de l’utilisateur
Schraf
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 60
Inscription : 05 mars 2020 21:45
Contact :

Prêt pour les vacances...

Message par Schraf » 04 juin 2020 17:28

@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 !

tablette.jpg
IBM 5110 sur tablette
tablette.jpg (132.88 Kio) Consulté 616 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

debug.jpg
Débogueur APL
debug.jpg (83.28 Kio) Consulté 616 fois

Avatar de l’utilisateur
Schraf
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 60
Inscription : 05 mars 2020 21:45
Contact :

Version 1.0 pour mobile de l'émulateur IBM 5110

Message par Schraf » 05 juin 2020 14:55

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 :

APL_Android.jpg
Version 1.0
APL_Android.jpg (103.79 Kio) Consulté 589 fois
Rien de très compliqué si vous voulez tenter l'expérience :
  • Dessin du clavier fait dans PowerPoint et export en image
PowerPoint.png
Dessin
PowerPoint.png (43.85 Kio) Consulté 589 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.
Excel.png
Quelques formules Excel
Excel.png (56.12 Kio) Consulté 589 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 de l’utilisateur
Schraf
Fonctionne à 75 bauds
Fonctionne à 75 bauds
Messages : 60
Inscription : 05 mars 2020 21:45
Contact :

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

Message par Schraf » 06 juin 2020 18:18

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] 

Répondre

Revenir vers « Emulateurs »