{"id":114,"date":"2022-03-14T15:41:47","date_gmt":"2022-03-14T14:41:47","guid":{"rendered":"https:\/\/blog.univ-angers.fr\/mathsinfo\/?page_id=114"},"modified":"2023-06-01T12:27:57","modified_gmt":"2023-06-01T11:27:57","slug":"apl-et-rpl-produit-interne","status":"publish","type":"page","link":"https:\/\/blog.univ-angers.fr\/mathsinfo\/apl-et-rpl-produit-interne\/","title":{"rendered":"et RPL : Produit interne"},"content":{"rendered":"<h2>Produit interne<\/h2>\n<p>L&rsquo;exemple classique de produit interne est la fonction <strong>SOMMEPROD<\/strong> d&rsquo;Excel permettant de faire une somme de produits. Ceci se traduit en APL par :<\/p>\n<pre>1 2 3 +.\u00d7 4 5 6\nOutput: 32            \u235d (1\u00d74) + (2\u00d75) + (3\u00d76)<\/pre>\n<p>Ce cas particulier s&rsquo;obtient facilement en RPL :<\/p>\n<pre>2: {1 2 3}\n1: {4 5 6}\n\u00d7           # Produit terme \u00e0 terme des 2 listes\n\u2211LIST       # Somme des \u00e9l\u00e9ments \n\n1: 32<\/pre>\n<p>D&rsquo;autres cas utiles en version APL :<\/p>\n<pre>\u2227.&lt;             \u235d Tous plus petits que...\n\u2228.&lt;             \u235d Au moins un plus petit que...\n\n4 6 8 \u2227.&lt; 10\n1             \u235d Tous plus petits que 10\n14 16 8 \u2228.&lt; 10\n1             \u235d Au moins un plus petit que 10<\/pre>\n<p>Et en version RPL :<\/p>\n<pre>2: {4 6 8}\n1: 10\n&lt; \u03a0LIST      # Produit de bool\u00e9ens = ET\n\n1: 1         # Tous plus petits que 10\n\n2: {4 6 8}\n1: 10\n&lt; \u2211LIST SIGN     # Signe somme bool\u00e9ens = OU\n\n1: 1         # Au moins un plus petit que 10<\/pre>\n<p>Remarquez que l&rsquo;on aurait pu utiliser une \u00e9criture plus proche de l&rsquo;APL :<\/p>\n<pre>2: {4 6 8}\n1: \u00ab 10 &lt; \u00ab AND \u00bb STREAM \u00bb\n<strong>EVAL<\/strong>\n1: 1         # Tous plus petits que 10\n\n2: {4 6 8}\n1: \u00ab 10 &lt; \u00ab OR \u00bb STREAM \u00bb\n<strong>EVAL<\/strong>\n1: 1         # Au moins un plus petit que 10<\/pre>\n<p>On en d\u00e9duit une g\u00e9n\u00e9ralisation du produit interne \u00ab\u00a0x f.g y\u00a0\u00bb,\u00a0\u00a0<a href=\"https:\/\/home.gwu.edu\/~nbrenner\/49GNotes.txt\">Norman Brenner<\/a>\u00a0propose la fonction <strong>IN.<\/strong> (not\u00e9e IOPROD dans le document original)<\/p>\n<pre>\u00ab \u2192 f \u00ab EVAL f STREAM \u00bb \u00bb\n'IN. <strong>STO<\/strong><\/pre>\n<p>Exemple :<\/p>\n<pre>4: {1 2 3}\n3: {4 5 6}\n2: \u00ab \u00d7 \u00bb\n1: \u00ab + \u00bb\n<strong>VAR<\/strong> IN.\n\n1: 32<\/pre>\n<p>Le principe est assez simple, l&rsquo;op\u00e9rateur <strong>+<\/strong> est mis dans la variable <strong>f<\/strong>\u00a0(et disparait de la pile), <strong>EVAL<\/strong> fait alors le produit entre les 2 listes puis on r\u00e9duit (application de mani\u00e8re r\u00e9cursive avec <strong>STREAM<\/strong>) en utilisant <strong>f<\/strong>, ce qui signifie ici faire la somme des termes.<\/p>\n<h2>Exercice r\u00e9vision<br \/>Plus grande valeur commune entre 2 listes<\/h2>\n<p>Il s&rsquo;agit de trouver quelle est la plus grande valeur commune entre 2 listes (ces listes pouvant comporter des nombres n\u00e9gatifs ou nuls). Voici le r\u00e9sultat \u00e0 traduire en RPL :<\/p>\n<pre>MAXI \u2190 {\u2308\/ (\u237a \u220a \u2375) \/ \u237a}\n2 3 8 1 MAXI 3 5 7 8 9\nOutput: 8<\/pre>\n<p><span style=\"text-decoration: underline\">Solution<\/span> : Le symbole \u237a d\u00e9signe l&rsquo;op\u00e9rande \u00e0 gauche et \u2375 l&rsquo;op\u00e9rande \u00e0 droite. On cr\u00e9e le vecteur logique \u237a \u220a \u2375 qui permettra de ne garder que les \u00e9l\u00e9ments de \u237a qui appartiennent \u00e0 \u2375. On r\u00e9duit \u00ab\u00a0\/\u00a0\u00bb ensuite ce vecteur par la fonction max \u2308. En utilisant la fonction <strong>CL.<\/strong> que l&rsquo;on a construite dans la premi\u00e8re partie et qui permet de faire une compression logique :<\/p>\n<pre>\u00ab 2 \u00ab IF NOT THEN DROP END \u00bb DOLIST \u00bb\n'CL. <strong>STO<\/strong><\/pre>\n<p>Ou notre version simplifi\u00e9e :<\/p>\n<pre>\u00ab SWAP IFT \u00bb\n'CL. <strong>STO<\/strong><\/pre>\n<p>On peut d\u00e9finir <strong>MAXI<\/strong> par :<\/p>\n<pre>\u00ab \u2192 v \u00ab DUP\n 1 \u00ab v SWAP POS SIGN \u00bb DOLIST \u00bb   # \u237a \u220a \u2375 ?\n CL.                              # (\u237a \u220a \u2375) \/ \u237a\n \u00ab MAX \u00bb STREAM                   # \u2308\/\n\u00bb\n'MAXI <strong>STO<\/strong><\/pre>\n<p>Testons :<\/p>\n<pre>2: {2 3 8 1}\n1: {3 5 7 8 9}\n<strong>VAR<\/strong> MAXI\n\n1: 8<\/pre>\n<p>Ou, si l&rsquo;on ne veut pas utiliser <strong>CL.<\/strong> et n&rsquo;avoir qu&rsquo;une seule boucle:<\/p>\n<pre>\u00ab \u2192 v \n \u00ab DUP          \n  2 \u00ab IF v SWAP POS NOT   # Boucle (\u237a \u220a \u2375) \/ \u237a\n      THEN DROP END\n  \u00bb DOLIST\n \u00bb\n \u00ab MAX \u00bb STREAM    # \u2308\/\n\u00bb\n'MAXI <strong>STO<\/strong><\/pre>\n<p>Signalons que \u00ab MAX \u00bb STREAM ne fonctionne pas lorsqu&rsquo;une liste est vide.<\/p>\n<pre>2: {2 3 8 1}\n1: {4 4 4 4}\n<strong>VAR<\/strong> MAXI\n\nSTREAM Error    # Car aucun \u00e9l\u00e9ment en commun<\/pre>\n\n\n<p><a href=\"https:\/\/blog.univ-angers.fr\/mathsinfo\/apl-et-rpl-extraire\/\">Lire la suite&#8230;<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Produit interne L&rsquo;exemple classique de produit interne est la fonction SOMMEPROD d&rsquo;Excel permettant de faire une somme de produits. Ceci se traduit en APL par : 1 2 3 +.\u00d7 4 5 6 Output: 32 \u235d (1\u00d74) + (2\u00d75) + &hellip; <a href=\"https:\/\/blog.univ-angers.fr\/mathsinfo\/apl-et-rpl-produit-interne\/\">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-114","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/pages\/114","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=114"}],"version-history":[{"count":1,"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/pages\/114\/revisions"}],"predecessor-version":[{"id":1610,"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/pages\/114\/revisions\/1610"}],"wp:attachment":[{"href":"https:\/\/blog.univ-angers.fr\/mathsinfo\/wp-json\/wp\/v2\/media?parent=114"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}