{"id":100,"date":"2022-03-13T12:09:50","date_gmt":"2022-03-13T11:09:50","guid":{"rendered":"https:\/\/blog.univ-angers.fr\/mathsinfo\/?page_id=100"},"modified":"2024-09-05T09:41:26","modified_gmt":"2024-09-05T08:41:26","slug":"apl-et-rpl","status":"publish","type":"page","link":"https:\/\/blog.univ-angers.fr\/mathsinfo\/apl-et-rpl\/","title":{"rendered":"et RPL : S\u00e9lection"},"content":{"rendered":"<p>Suite \u00e0 un <a title=\"Post Silicium\" href=\"http:\/\/www.silicium.org\/forum\/viewtopic.php?f=46&amp;t=47276&amp;p=566083#p566047\" target=\"_blank\" rel=\"noopener\">post de FLISZT publi\u00e9 sur le forum Silicium.org<\/a>, je vous propose de reprendre quelques \u00e9l\u00e9ments trouv\u00e9s <a title=\"Document\" href=\"https:\/\/uabox.univ-angers.fr\/s\/wwwtPbW6i7LiLaA\" target=\"_blank\" rel=\"noopener\">dans le document<\/a> de\u00a0Norman Brenner. Il s&rsquo;agit de traduire certaines des fonctions APL (s\u00e9lection, r\u00e9duction, transformation&#8230;) en RPL pour les calculatrices HP-48\/49\/50G<\/p>\n<div id=\"attachment_138\" style=\"width: 970px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/blog.univ-angers.fr\/mathsinfo\/files\/2022\/03\/hp484950.jpeg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-138\" class=\"size-full wp-image-138\" src=\"https:\/\/blog.univ-angers.fr\/mathsinfo\/files\/2022\/03\/hp484950.jpeg\" alt=\"Machines utilis\u00e9es\" width=\"960\" height=\"720\" srcset=\"https:\/\/blog.univ-angers.fr\/mathsinfo\/files\/2022\/03\/hp484950.jpeg 960w, https:\/\/blog.univ-angers.fr\/mathsinfo\/files\/2022\/03\/hp484950-300x225.jpeg 300w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/a><p id=\"caption-attachment-138\" class=\"wp-caption-text\">Machines utilis\u00e9es<\/p><\/div>\n<h1>Cr\u00e9ation d&rsquo;un r\u00e9pertoire APL sur les HP<\/h1>\n<div title=\"Page 131\">\n<pre>HP 48G : \u21b1 MEMORY\u00a0 NEW\nHP 49\/50 :\u00a0\u21b0 FILES<\/pre>\n<p>Puis :<\/p>\n<pre>NAME : APL\n\u2611 DIRECTORY\nOK<\/pre>\n<p>Ou encore en tapant la commande :<\/p>\n<pre>'APL' <strong>ALPHA ALPHA<\/strong> CRDIR<\/pre>\n<p>Pour se d\u00e9placer dans le r\u00e9pertoire {HOME APL} :<\/p>\n<pre><strong>VAR<\/strong> APL<\/pre>\n<p>Pour revenir \u00e0 la racine {HOME} :<\/p>\n<pre>HP 48G : \u21b1 <strong>HOME<\/strong>\nHP 49\/50G : \u21b0 <strong>UPDIR<\/strong> (<strong>ENTER<\/strong> sur HP 49)<\/pre>\n<\/div>\n<p>Par la suite, nous travaillerons dans le r\u00e9pertoire {HOME APL}<\/p>\n<h2>Exemple 1 &#8211; Compression logique<\/h2>\n<p>Ecrire un programme\u00a0<strong>RECUS<\/strong> qui \u00e0 partir d&rsquo;une liste (vecteur en APL) de notes d&rsquo;\u00e9tudiants renvoie la liste des notes\u00a0\u2265 10.<\/p>\n<p><em>R\u00e9sultat attendu en APL<\/em><\/p>\n<pre>RECUS 5 12 13 8 17 2\n12 13 17<\/pre>\n<p><em>R\u00e9sultat attendu en RPL<\/em><\/p>\n<pre>1: {5 12 13 8 17 2}\n<strong>VAR<\/strong> RECUS\n1: {12 13 17}<\/pre>\n<p>En APL, la <strong>compression logique<\/strong> est une fonction dyadique (2 arguments), celui de gauche est un <strong>vecteur logique<\/strong>\u00a0(1 ou 0) et celui de droite un <strong>vecteur quelconque<\/strong>. Le r\u00e9sultat sera le vecteur compos\u00e9 uniquement des \u00e9l\u00e9ments associ\u00e9s aux 1. Exemple :<\/p>\n<pre>1 0 1 \/ 5 12 13\n5 13            \u235d On garde 1er et 3e \u00e9l\u00e9ments<\/pre>\n<p>Vous pouvez <a title=\"APL Online\" href=\"https:\/\/tio.run\/##SyzI0U2pTMzJT9dNzkksLs5M\/g8EhgoGCoYK@gqmCoZGCobGAA\" target=\"_blank\" rel=\"noopener\">tester la commande en direct ici<\/a>.<\/p>\n<p>Voici la traduction propos\u00e9e par\u00a0Norman Brenner pour la <strong>C<\/strong>ompression <strong>L<\/strong>ogique que nous noterons <strong>CL.<\/strong>\u00a0(<strong>BSEL<\/strong> dans le document initial) :<\/p>\n<pre>\u00ab 2 \u00ab IF NOT THEN DROP END \u00bb DOLIST \u00bb\n'CL. <strong>STO          <\/strong># On m\u00e9morise le programme<\/pre>\n<p>Avant les explications et une simplification, voyons son utilisation :<\/p>\n<pre>2: {5 12 13 8 17 2}  # Notes au niveau 2\n1: {0 1 1 0 1 0}     # Masque bool\u00e9en niveau 1\n<strong>VAR<\/strong> CL.              # On lance le programme\n\n1: {12. 13. 17.}        # R\u00e9sultat au niveau 1<\/pre>\n<p>DOLIST permet d&rsquo;appliquer une fonction ou un programme \u00e0 un groupe de listes. Il faut pour cela saisir des listes, le nombre de listes \u00e0 traiter et le programme ou la fonction \u00e0 ex\u00e9cuter.<\/p>\n<p>Le programme <strong>CL.<\/strong> indique qu&rsquo;il y a <strong>2<\/strong> listes \u00e0 traiter. Il prend ensuite la n\u00e9gation de la liste du niveau 1 (Ainsi les 0 deviennent des 1 et r\u00e9ciproquement) et applique DROP pour \u00e9liminer les \u00e9l\u00e9ments correspondant \u00e0 1. Voici 2 exemples illustrant l&rsquo;utilisation de NOT et DOLIST :<\/p>\n<pre>{0 1 1 0 1 0}    # Liste de bool\u00e9ens \n<strong>ALPHA ALPHA<\/strong> NOT\n{1 0 0 1 0 1}    # N\u00e9gation\n\n4: {5 3 1 4}     # Les listes \u00e0 traiter\n3: {7 2 8 2}\n2: 2             # Nb de listes\n1: \u00ab MAX \u00bb       # Fonction \u00e0 appliquer\n<strong>PRG<\/strong> LIST PROC <span style=\"text-decoration: underline\">DOLIST\n<\/span>\n1: {7. 3. 8. 4.} # Max entre les 2 listes<\/pre>\n<p>Nous pouvons maintenant cr\u00e9er notre programme <strong>RECUS<\/strong>, pour cela il faut fournir \u00e0 <strong>CL.<\/strong> la liste des notes ainsi qu&rsquo;un \u00ab\u00a0vecteur\u00a0\u00bb logique pr\u00e9cisant lesquelles\u00a0 sont\u00a0\u2265 10. Pour cela on duplique la liste et on effectue le test 10 \u2265\u00a0 :<\/p>\n<pre>\u00ab DUP 10 \u2265 CL.\u00bb   \n'RECUS <strong>STO<\/strong>        # On m\u00e9morise le programme<\/pre>\n<div id=\"attachment_101\" style=\"width: 299px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/blog.univ-angers.fr\/mathsinfo\/files\/2022\/03\/CL1.jpeg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-101\" class=\"size-full wp-image-101\" src=\"https:\/\/blog.univ-angers.fr\/mathsinfo\/files\/2022\/03\/CL1.jpeg\" alt=\"Les 2 programmes CL. et RECUS et application de RECUS \u00e0 la liste {5 12 13 8 17 2}\" width=\"289\" height=\"172\" \/><\/a><p id=\"caption-attachment-101\" class=\"wp-caption-text\">Les 2 programmes CL. et RECUS et application de RECUS \u00e0 la liste {5 12 13 8 17 2}<\/p><\/div>\n<p>En APL, <a title=\"APL Online\" href=\"https:\/\/tio.run\/##SyzI0U2pTMzJT9dNzkksLs5M\/g8EQa7OocEKj9omKFRrPOrd@qhzqaGBpoK@ApBdywWRNFUwNFIwNFawUDA0VzACAA\" target=\"_blank\" rel=\"noopener\">le programme pourrait \u00eatre<\/a> :<\/p>\n<pre>RECUS \u2190 {(\u2375 \u2265 10) \/ \u2375}\nRECUS 5 12 13 8 17 2\nOutput : 12 13 17<\/pre>\n<p>On peut \u00e9galement utiliser <strong>IFT<\/strong> pour s\u00e9lectionner les \u00e9l\u00e9ments d&rsquo;une liste et enlever les autres, en effet :<\/p>\n<pre>1: {0 1 1 0 1 0}\n2: {5 12 13 8 17 2}\n<strong>PRG<\/strong> BRCH <strong>NXT<\/strong> IFT\n1: {12 13 17}<\/pre>\n<p>Ainsi notre programme <strong>RECUS<\/strong> peut s&rsquo;\u00e9crire plus simplement :<\/p>\n<pre>\u00ab DUP 10 \u2265 SWAP IFT \u00bb\n'RECUS <strong>STO<\/strong><\/pre>\n<p>On duplique la liste (DUP), on cr\u00e9e le vecteur logique (10 \u2265 ), on met le vecteur logique au niveau 2 (SWAP) et on applique IFT.<\/p>\n<p>Ceci donne l&rsquo;id\u00e9e de simplifier le code <strong>CL.<\/strong> propos\u00e9 par Norman Brenner par :<\/p>\n<pre>\u00ab SWAP IFT \u00bb\n'CL. <strong>STO<\/strong><\/pre>\n<p>Remarquons que l&rsquo;on peut enchainer les compressions, par exemple s\u00e9lectionnons les notes &gt; 8 ET &lt; 13 :<\/p>\n<pre>\u00ab DUP 8 &gt; CL. DUP 13 &lt; CL.\u00bb\n'RAT <strong>STO<\/strong>      # Etudiants allant au rattrapage\n\n1: {5 12 13 8 17 2}\n<strong>VAR<\/strong> RATT\n1: {12}<\/pre>\n<p>La difficult\u00e9 est donc principalement de cr\u00e9er le vecteur logique. Pour terminer cette premi\u00e8re partie voici un second exemple o\u00f9 l&rsquo;on veut supprimer les valeurs d&rsquo;une liste qui ne sont pas enti\u00e8res :<\/p>\n<pre>1: { 1 2.5 3.7 8 4}\n<strong>VAR<\/strong> ENT\n1: {1 8 4}<\/pre>\n<p>On peut par exemple cr\u00e9er le vecteur logique\u00a0 en testant si le nombre n&rsquo;est pas plus grand que sa partie enti\u00e8re, ce qui donne :<\/p>\n<pre>\u00ab DUP DUP IP &gt; NOT CL.\u00bb   \n'ENT <strong>STO<\/strong><\/pre>\n<p>La version a priori plus logique : <strong>IP ==<\/strong> (Est-ce que le nombre est \u00e9gal \u00e0 sa partie enti\u00e8re) ne fonctionne pas car la comparaison ne s&rsquo;effectue plus \u00e9l\u00e9ment par \u00e9l\u00e9ment mais entre les listes, le r\u00e9sultat renvoy\u00e9 est 0 ou 1 et non plus un vecteur logique. Si quelqu&rsquo;un a une id\u00e9e, <a title=\"Forum Silicium\" href=\"http:\/\/www.silicium.org\/forum\/viewtopic.php?f=46&amp;t=47276\" target=\"_blank\" rel=\"noopener\">rendez-vous sur le forum de Silicium<\/a>.<\/p>\n<p><a title=\"APL Online\" href=\"https:\/\/tio.run\/##SyzI0U2pTMzJT9dNzkksLs5M\/g8Ern4hCo\/aJihUazzq3Wr7qKcLSGkq6CsAqVoukKShgpGeqYKxnrmChYIJAA\" target=\"_blank\" rel=\"noopener\">En APL<\/a> :<\/p>\n<pre>ENT \u2190 {(\u2375 = \u230a\u2375) \/ \u2375}\nENT 1 2.5 3.7 8 4\nOutput : 1 8 4<\/pre>\n<p><a title=\"APL et RPL : R\u00e9duction\" href=\"https:\/\/blog.univ-angers.fr\/mathsinfo\/apl-et-rpl-reduction\/\">Lire la suite&#8230;<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Suite \u00e0 un post de FLISZT publi\u00e9 sur le forum Silicium.org, je vous propose de reprendre quelques \u00e9l\u00e9ments trouv\u00e9s dans le document de\u00a0Norman Brenner. Il s&rsquo;agit de traduire certaines des fonctions APL (s\u00e9lection, r\u00e9duction, transformation&#8230;) en RPL pour les calculatrices &hellip; <a href=\"https:\/\/blog.univ-angers.fr\/mathsinfo\/apl-et-rpl\/\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":4913,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-100","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/pages\/100","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/users\/4913"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/comments?post=100"}],"version-history":[{"count":1,"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/pages\/100\/revisions"}],"predecessor-version":[{"id":1929,"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/pages\/100\/revisions\/1929"}],"wp:attachment":[{"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/media?parent=100"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}