{"id":104,"date":"2022-03-13T15:53:38","date_gmt":"2022-03-13T14:53:38","guid":{"rendered":"https:\/\/blog.univ-angers.fr\/mathsinfo\/?page_id=104"},"modified":"2022-10-24T15:41:21","modified_gmt":"2022-10-24T14:41:21","slug":"apl-et-rpl-reduction","status":"publish","type":"page","link":"https:\/\/blog.univ-angers.fr\/mathsinfo\/apl-et-rpl-reduction\/","title":{"rendered":"et RPL : R\u00e9duction"},"content":{"rendered":"<p>En APL, l&rsquo;association du symbole de r\u00e9duction \/ et d&rsquo;une fonction dyadique permet d&rsquo;appliquer cette derni\u00e8re entre tous les \u00e9l\u00e9ments de l&rsquo;op\u00e9rande (terme de droite). Exemples :<\/p>\n<pre>+\/ 1 2 3 4\nOutput : 10       \u235d (1 + (2 + (3 + 4)))\n\n\u2308\/ 1 5 2 4       \u235d x \u2308 y &lt;=&gt; max(x,y)\nOutput : 5       \u235d max(1, max(5, max(2,4)))<\/pre>\n<p>On a un \u00e9quivalent plut\u00f4t \u00e9l\u00e9gant en RPL avec STREAM :<\/p>\n<pre>2: { 1 2 3 4 }       # L'op\u00e9rande\n1: \u00ab + \u00bb             # La fonction \u00e0 appliquer\n<strong>PRG<\/strong> LIST PROC STREAM\n\n1: 10                # (((1 + 2) + 3) + 4)\n\n2: { 1 5 2 4 }\n1: \u00ab MAX \u00bb\nSTREAM\n\n1: 5                # max(max(max(1, 5), 2), 4)<\/pre>\n<p>Attention, en APL les calculs se font de la droite vers la gauche, alors qu&rsquo;en RPL ils se font de la gauche vers la droite :<\/p>\n<pre>2: { 1 2 3 4 }\n1: \u00ab - \u00bb         # Soustraction\nSTREAM\n\n1: -8            # (((1 - 2) - 3) - 4)\n\n2: { 4 3 2 1 }\n1: \u00ab - \u00bb         # Soustraction\nSTREAM\n\n1: -2            # (1 - (2 - (3 - 4)))<\/pre>\n<p>et en APL :<\/p>\n<pre>-\/ 1 2 3 4\n\u00af2               \u235d (1 - (2 - (3 - 4)))<\/pre>\n<p>Il est \u00e9galement possible en APL et pr\u00e9ciser le nombre d&rsquo;\u00e9l\u00e9ments \u00e0 traiter lors de chaque r\u00e9duction, par exemple :<\/p>\n<pre>2 +\/ 1 2 3 4 5\n3 5 7 9       \u235d Par 2 : 1+2=3, 2+3=5, 3+4=7...<\/pre>\n<p>Et bien c&rsquo;est \u00e9galement possible en RPL avec DOSUBS :<\/p>\n<pre>3: {1 2 3 4 5}\n2: 2             # Traiter les \u00e9l\u00e9ments 2 par 2 \n1: \u00ab + \u00bb         # Op\u00e9ration pour la r\u00e9duction\n<strong>PRG<\/strong> LIST PROC DOSUB\n\n1: {3. 5. 7. 9.}<\/pre>\n<p>Dans le cas o\u00f9 le nombre d&rsquo;\u00e9l\u00e9ments \u00e0 traiter est \u00e9gal \u00e0 1, cela revient finalement \u00e0 faire un MAP, c&rsquo;est-\u00e0-dire une transformation terme \u00e0 terme des \u00e9l\u00e9ments de la suite.<\/p>\n<p>Remarquons aussi que dans ce cas, DOSUBS et DOLIST ont le m\u00eame effet :<\/p>\n<pre>2: {9 10 12}\n1: \u00ab 1 \u00ab SQ \u00bb DOSUB \u00bb   # Mettre au carr\u00e9 1 par 1\n<strong>EVAL<\/strong>\n\n1: {81. 100. 144.}\n\n2: {9 10 12}\n1: \u00ab 1 \u00ab SQ \u00bb DOLIST \u00bb  # Mettre au carr\u00e9 1 liste\n<strong>EVAL<\/strong>\n\n1: {81. 100. 144.}<\/pre>\n<p>A priori pas d&rsquo;int\u00e9r\u00eat car { 9 10 12 } SQ donne le m\u00eame r\u00e9sultat, cependant regardons cet exemple <a title=\"Vid\u00e9o Youtube\" href=\"https:\/\/youtu.be\/s-E7BsMg_Qc?t=357\" target=\"_blank\" rel=\"noopener\">tir\u00e9 d&rsquo;une de mes vid\u00e9os sur l&rsquo;APL<\/a><\/p>\n<h2>Exemple 2 &#8211; Meilleurs score<\/h2>\n<p>R\u00e9cup\u00e9rer les meilleurs scores de 3 \u00e9quipes :<\/p>\n<pre>BEST (4 8 9) (5 10 3) (7 12)  \u235d 3 \u00e9quipes\n9 10 12      \u235d Meilleurs score de chaque \u00e9quipe<\/pre>\n<p>On voudrait cet \u00e9quivalent en RPL :<\/p>\n<pre>1: {{4 8 9} {5 10 3} {7 12}}\n<strong>VAR<\/strong> BEST\n\n1: {9. 10. 12.}<\/pre>\n<p>Il faut donc que l&rsquo;on prenne le MAX de CHAQUE liste, c&rsquo;est\u00a0 \u00e0 la fois une r\u00e9duction par le maximum et un mapping. D&rsquo;o\u00f9 simplement :<\/p>\n<pre>\u00ab 1 \u00ab \u00ab MAX \u00bb STREAM \u00bb DOSUBS \u00bb\n'BEST <strong>STO<\/strong><\/pre>\n<h2>Exemple 3 &#8211; Combien sont plus grands que moi ?<\/h2>\n<p>Toujours tir\u00e9 d&rsquo;une de<a title=\"Vid\u00e9o Youtube\" href=\"https:\/\/youtu.be\/s-E7BsMg_Qc?t=502\" target=\"_blank\" rel=\"noopener\">\u00a0mes vid\u00e9os sur l&rsquo;APL<\/a>, on voudrait connaitre, pour chaque \u00e9l\u00e9ment d&rsquo;une liste, combien sont plus grands. Par exemple :<\/p>\n<pre>{1 30 4 16 5 1 8}\n<strong>VAR<\/strong> SUP\n{5. 0. 4. 1. 3. 5. 2.}<\/pre>\n<p>Ce qui signifie que 5 valeurs sont strictement plus grandes que 1, aucune n&rsquo;est plus grande que 30, 4 sont strictement plus grandes que 4, etc.<\/p>\n<p>Chaque \u00e9l\u00e9ment doit \u00eatre compar\u00e9 \u00e0 l&rsquo;ensemble de la liste, ce qui va cr\u00e9er un vecteur logique dont il faudra additionner les termes (r\u00e9duction). Par exemple<\/p>\n<pre>1 &lt; {1 30 4 16 5 1 8}\n\n{0. 1. 1. 1. 1. 0. 1.}<\/pre>\n<p>dont la somme fait 5.\u00a0 Cette addition peut se faire par un<\/p>\n<pre>\u00ab + \u00bb STREAM<\/pre>\n<p>ou bien s\u00fbr par :<\/p>\n<pre>\u2211LIST<\/pre>\n<p>Finalement, le programme SUP peut s&rsquo;\u00e9crire :<\/p>\n<pre>\u00ab DUP \u2192s           # Copie de la liste dans s\n \u00ab 1               # D\u00e9but du mapping\n  \u00ab s &lt; \u2211LIST      # Vecteur bool\u00e9en et r\u00e9duction\n  \u00bb DOSUBS         # ou DOLIST\n \u00bb\n\u00bb\n'SUP <strong>STO<\/strong><\/pre>\n<p>Il y a plusieurs solutions en APL (voir vid\u00e9o) mais <a title=\"APL Online\" href=\"https:\/\/tio.run\/##SyzI0U2pTMzJT9dNzkksLs5M\/g8EwaEBj9omVFdr6ys86t2qYKNQUHtohUKBAlAQJFDLBVSgYKhgbKBgomBopmAKZFsAAA\" target=\"_blank\" rel=\"noopener\">celle analogue \u00e0 la version RPL<\/a> est :<\/p>\n<pre>SUP \u2190 {{+\/ \u2375 &lt; s}\u00a8 s \u2190 \u2375}\nSUP 1 30 4 16 5 1 8\n\nOutput: 5 0 4 1 3 5 2<\/pre>\n<p>On a l&rsquo;affectation s \u2190 \u2375 de la liste vers s, puis pour chaque (not\u00e9 par le \u00a8 ) \u00e9l\u00e9ment \u2375, on compte +\/ combien l&rsquo;\u00e9l\u00e9ments sont plus grands que \u2375.<\/p>\n<p><a title=\"APL et RPL : Caract\u00e8res\" href=\"https:\/\/blog.univ-angers.fr\/mathsinfo\/apl-et-rpl-caracteres\/\">Lire la suite&#8230;<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>En APL, l&rsquo;association du symbole de r\u00e9duction \/ et d&rsquo;une fonction dyadique permet d&rsquo;appliquer cette derni\u00e8re entre tous les \u00e9l\u00e9ments de l&rsquo;op\u00e9rande (terme de droite). Exemples : +\/ 1 2 3 4 Output : 10 \u235d (1 + (2 + &hellip; <a href=\"https:\/\/blog.univ-angers.fr\/mathsinfo\/apl-et-rpl-reduction\/\">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-104","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/pages\/104","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=104"}],"version-history":[{"count":2,"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/pages\/104\/revisions"}],"predecessor-version":[{"id":1068,"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/pages\/104\/revisions\/1068"}],"wp:attachment":[{"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/media?parent=104"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}