{"id":534,"date":"2014-09-13T08:02:00","date_gmt":"2014-09-13T04:02:00","guid":{"rendered":"https:\/\/iremi.univ-reunion.fr\/?p=534"},"modified":"2025-10-25T12:27:46","modified_gmt":"2025-10-25T08:27:46","slug":"sofus","status":"publish","type":"post","link":"https:\/\/iremi.univ-reunion.fr\/?p=534","title":{"rendered":"Sofus"},"content":{"rendered":"\n<p>Sofus (le nom est un hommage \u00e0 Sophus Lie), qui a <a href=\"https:\/\/www.youtube.com\/channel\/UCUD0gIp0xJBJ-hQJgl_QN_Q\">sa cha\u00eene youtube<\/a>, est \u00e0 la fois<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>un langage de programmation Turing-complet (inspir\u00e9 de Cobol),<\/li>\n\n\n\n<li>une <a href=\"https:\/\/alainbusser.github.io\/Sofus\/Sofus_fr.html\">webApp<\/a> permettant de programmer en Sofus<\/li>\n\n\n\n<li>des interpr\u00e9teurs (en Python par exemple) pour calculatrices telles <a href=\"https:\/\/my.numworks.com\/python\/alain-busser\/sofus\">la Numworks<\/a>&#8230;<\/li>\n<\/ul>\n\n\n\n<p>On programme en ligne, avec des blocs similaires \u00e0 ceux de Scratch, par exemple si on veut simuler la suite de Collatz, on place des blocs ainsi :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"292\" height=\"221\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-063120.png\" alt=\"\" class=\"wp-image-559\" \/><\/figure>\n\n\n\n<p>Un clic sur le drapeau vert aura alors pour effet de produire cet affichage :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>53\n80\n40\n20\n10\n5\n8\n4\n2\n1<\/code><\/pre>\n\n\n\n<p>Sofus poss\u00e8de de multiples tortues (ce qui lui permet de r\u00e9soudre les sujets de DNB, plut\u00f4t mieux que Scratch) et on peut utiliser la tortue pour repr\u00e9senter graphiquement la suite :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"548\" height=\"323\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-064209.png\" alt=\"\" class=\"wp-image-561\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-064209.png 548w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-064209-300x177.png 300w\" sizes=\"auto, (max-width: 548px) 100vw, 548px\" \/><\/figure>\n\n\n\n<p>Le graphique obtenu est celui-ci :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"614\" height=\"437\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-064220.png\" alt=\"\" class=\"wp-image-562\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-064220.png 614w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-064220-300x214.png 300w\" sizes=\"auto, (max-width: 614px) 100vw, 614px\" \/><\/figure>\n\n\n\n<p>La sp\u00e9cialit\u00e9 de Sofus est surtout de pouvoir modifier une variable en place, comme le permet Python avec les <code>+=<\/code>, <code>-=<\/code>, <code>*=<\/code> et <code>\/=<\/code> mais en notation pr\u00e9fixe (celle de Python, h\u00e9rit\u00e9e de C, est infixe).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">De Sofus vers Python avec SofusPy<\/h2>\n\n\n\n<p>Patrick Raffinat a d\u00e9velopp\u00e9 une interface permettant de produire du code Python \u00e0 partir des blocs de Sofus, elle s&rsquo;appelle SofusPy. On peut consid\u00e9rer SofusPy comme un fork de Sofus, aussi un fork du fork a-t-il \u00e9t\u00e9 produit, c&rsquo;est <a href=\"https:\/\/alainbusser.github.io\/SofusPy974\/\">SofusPy974<\/a>.<\/p>\n\n\n\n<p>Pour programmer ais\u00e9ment la suite de Collatz, on peut cliquer sur le bouton <code>commandes<\/code> puis entrer<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>u = 35<\/code><\/pre>\n\n\n\n<p>ensuite, en cliquant \u00e0 nouveau sur <code>commandes<\/code>, on voit qu&rsquo;un bloc est apparu : <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"226\" height=\"63\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-065431.png\" alt=\"\" class=\"wp-image-565\" \/><\/figure>\n\n\n\n<p>Et, \u00e0 partir de l\u00e0, il est ais\u00e9 de structurer le programme en ins\u00e9rant une boucle :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"314\" height=\"172\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-070135.png\" alt=\"\" class=\"wp-image-568\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-070135.png 314w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-070135-300x164.png 300w\" sizes=\"auto, (max-width: 314px) 100vw, 314px\" \/><\/figure>\n\n\n\n<p>Si u est impair, on doit le tripler puis l&rsquo;incr\u00e9menter. En cliquant \u00e0 nouveau sur <code>commandes<\/code>, on \u00e9crit :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>u*3<\/code><\/pre>\n\n\n\n<p>et un nouveau clic sur commandes donne<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"546\" height=\"231\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-070209.png\" alt=\"\" class=\"wp-image-569\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-070209.png 546w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-070209-300x127.png 300w\" sizes=\"auto, (max-width: 546px) 100vw, 546px\" \/><\/figure>\n\n\n\n<p>Ceci \u00e9vite d&rsquo;avoir \u00e0 se rappeler comment on fait pour tripler une variable : SofusPy se charge de cela. Apr\u00e8s <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>u+1<\/code><\/pre>\n\n\n\n<p>dans les <code>commandes<\/code>, on a<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"372\" height=\"235\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-070601.png\" alt=\"\" class=\"wp-image-570\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-070601.png 372w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-070601-300x190.png 300w\" sizes=\"auto, (max-width: 372px) 100vw, 372px\" \/><\/figure>\n\n\n\n<p>Ensuite, toujours dans les <code>commandes<\/code>, on \u00e9crit <code>u\/2<\/code> pour avoir<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"372\" height=\"278\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-070725.png\" alt=\"\" class=\"wp-image-571\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-070725.png 372w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-070725-300x224.png 300w\" sizes=\"auto, (max-width: 372px) 100vw, 372px\" \/><\/figure>\n\n\n\n<p>qui donne le script presque complet : il ne reste plus qu&rsquo;\u00e0 ajouter l&rsquo;affichage (et r\u00e9duire les blocs pour plus de lisibilit\u00e9) :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"304\" height=\"223\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-071119.png\" alt=\"\" class=\"wp-image-573\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-071119.png 304w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-071119-300x220.png 300w\" sizes=\"auto, (max-width: 304px) 100vw, 304px\" \/><\/figure>\n\n\n\n<p>Comme dans Sofus, on peut tester le script en l&rsquo;ex\u00e9cutant (par un clic sur le drapeau vert), mais aussi, cliquer sur le bouton <code>Editeur<\/code> qui permet de savoir comment on fait, en Python, pour tripler une variable, l&rsquo;incr\u00e9menter, la diviser par 2, l&rsquo;affecter, la tester, et boucler dessus :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>u = 35\nwhile not u == 1:\n    if u % 2 == 1:\n        u = u * 3\n        u = u + 1\n    u = u \/ 2\n    print(u)<\/code><\/pre>\n\n\n\n<p>SofusPy974 est un acc\u00e9l\u00e9rateur d&rsquo;apprentissage de Python. Cerise sur le g\u00e2teau, il y a (dans l&rsquo;\u00e9diteur Python) un bouton <code>pseudocode<\/code> qui r\u00e9agit au clic en produisant, dans la fen\u00eatre d&rsquo;affichage, ce genre de prose :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>u \u2190 35\nTant que on n'a pas u = 1\n    si u % 2 = 1\n        u \u2190 u \u00d7 3\n        u \u2190 u + 1\n    u \u2190 u \/ 2\n    afficher (u)<\/code><\/pre>\n\n\n\n<p>On peut bien entendu enregistrer le script Python engendr\u00e9, voire utiliser la console Python pour programmer directement en ligne (sans passer par Sofus).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sofus en cycles 3 et 4<\/h2>\n\n\n\n<p>La difficult\u00e9 qu&rsquo;ont des \u00e9l\u00e8ves de cours moyen \u00e0 s&rsquo;orienter dans le plan (alors m\u00eame que les rotations n&rsquo;y sont que d&rsquo;angles droit) a men\u00e9 \u00e0 la cr\u00e9ation d&rsquo;une autre version de Sofus, sp\u00e9cialis\u00e9e dans le cycle 3, elle s&rsquo;appelle <a href=\"https:\/\/alainbusser.github.io\/Sofus\/SofusPrim\">SofusPrim<\/a>.<\/p>\n\n\n\n<p>Par ailleurs, l&rsquo;abondance de programmes de calcul au DNB a men\u00e9 \u00e0 une int\u00e9gration dans Sofus de possibilit\u00e9 de calcul formel permettant d&rsquo;\u00e9tudier des programmes de calcul. Cette nouvelle version s&rsquo;appelle <a href=\"https:\/\/alainbusser.github.io\/Sofus\/SofusColl.html\">SofusColl<\/a>. Voil\u00e0 comment on peut s&rsquo;en servir pour r\u00e9soudre le probl\u00e8me de DNB <a href=\"https:\/\/www.apmep.fr\/IMG\/pdf\/Brevet_Polynesie_23_juin_2015.pdf\">Polyn\u00e9sie 2015<\/a> :<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Voici un programme de calcul.<br>\u2022Choisir un nombre<br>\u2022Ajouter 1<br>\u2022Calculer le carr\u00e9 de cette somme<br>\u2022Soustraire 9 au r\u00e9sultat.<br>1.V\u00e9rifier qu\u2019en choisissant 7 comme nombre de d\u00e9part, le r\u00e9sultat obtenu avec ce programme est 55.<br>2.Lorsque le nombre choisi est \u22126, quel r\u00e9sultat obtient-on&nbsp;?<br>4.Le programme donne 0 pour deux nombres. D\u00e9terminer ces deux nombres.<\/p>\n<\/blockquote>\n\n\n\n<p>Le programme de calcul produit un r\u00e9sultat qui d\u00e9pend du nombre choisi au d\u00e9part. Conceptuellement, il s&rsquo;agit d&rsquo;une fonction, et le nombre qu&rsquo;on lui fournit est renomm\u00e9 variable, car en fait 7 (dans la question 1) n&rsquo;est pas un nombre, mais la valeur initiale d&rsquo;une variable :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"389\" height=\"306\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-074703.png\" alt=\"\" class=\"wp-image-577\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-074703.png 389w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-074703-300x236.png 300w\" sizes=\"auto, (max-width: 389px) 100vw, 389px\" \/><\/figure>\n\n\n\n<p>L&rsquo;affichage en bas donne bien 55 (r\u00e9ponse \u00e0 la question 1). Pour r\u00e9pondre \u00e0 la question 2, il suffit de mettre -6 \u00e0 la place de 7 :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"366\" height=\"69\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-074727.png\" alt=\"\" class=\"wp-image-578\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-074727.png 366w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-074727-300x57.png 300w\" sizes=\"auto, (max-width: 366px) 100vw, 366px\" \/><\/figure>\n\n\n\n<p>ce qui donne dans la console :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>16<\/code><\/pre>\n\n\n\n<p>Pour la question 4, on gagne \u00e0 nommer x le nombre choisi :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"62\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-075054.png\" alt=\"\" class=\"wp-image-579\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-075054.png 400w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-075054-300x47.png 300w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><\/figure>\n\n\n\n<p>ce qui donne cet affichage :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code> - 8 + x**2 + 2*x<\/code><\/pre>\n\n\n\n<p>On peut faire mieux :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"504\" height=\"68\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-075254.png\" alt=\"\" class=\"wp-image-580\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-075254.png 504w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-075254-300x40.png 300w\" sizes=\"auto, (max-width: 504px) 100vw, 504px\" \/><\/figure>\n\n\n\n<p>ce qui donne<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>- 8 + x\u00b2 + 2 x<\/code><\/pre>\n\n\n\n<p>Pour r\u00e9soudre la question 4, on peut faire<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"509\" height=\"68\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-075438.png\" alt=\"\" class=\"wp-image-582\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-075438.png 509w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-075438-300x40.png 300w\" sizes=\"auto, (max-width: 509px) 100vw, 509px\" \/><\/figure>\n\n\n\n<p>ce qui produit l&rsquo;affichage peu lisible (mais correct) :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>- 1 + (sqrt(36))\/2, - 1 + (sqrt(36))\/-2<\/code><\/pre>\n\n\n\n<p>Mais pour peu que l&rsquo;on sache que la racine carr\u00e9e (<code>sqrt<\/code>) de 36 est 6, les deux solutions s&rsquo;\u00e9crivent -1+6\/2 et -1+6\/-2 soit -1+3 et -1-3 soit encore 2 et -4. Ce qui donne envie de faire<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"363\" height=\"121\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-080049.png\" alt=\"\" class=\"wp-image-584\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-080049.png 363w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2025\/06\/Capture-decran-2025-06-13-080049-300x100.png 300w\" sizes=\"auto, (max-width: 363px) 100vw, 363px\" \/><\/figure>\n\n\n\n<p>Le r\u00e9sultat est exactement le m\u00eame que celui vu avant :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>- 8 + x**2 + 2*x<\/code><\/pre>\n\n\n\n<p>ce qui permet de r\u00e9soudre la question 4.<\/p>\n\n\n\n<p>Remarque : la moiti\u00e9 environ des programmes de calcul du DNB comprennent une \u00e9tape du genre <em>soustraire le nombre de d\u00e9part<\/em> qui donne un graphe un peu compliqu\u00e9 lorsqu&rsquo;on veut en repr\u00e9senter en flow programming (voir plus bas) et n\u00e9cessite de m\u00e9moriser une copie du nombre de d\u00e9part pour pouvoir ex\u00e9cuter ult\u00e9rieurement ce genre de ligne faisant appel au nombre de d\u00e9part. Cette m\u00e9morisation du nombre de d\u00e9part rend d&rsquo;ailleurs impossible l&rsquo;usage de la m\u00e9moire de travail, et emp\u00eache de faire de ce genre de programme de calcul, un activit\u00e9 mentale.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sofus, avenir des programmes de calcul ?<\/h2>\n\n\n\n<p>Sofus, cr\u00e9\u00e9 \u00e0 l&rsquo;origine pour la programmation (programmes de calcul) en cycle 4, a fait ses preuves surtout en lyc\u00e9e (apprentissage de la programmation en maths, passage de Scratch \u00e0 Python avec SofusPy974, &#8230;). Mais l&rsquo;avenir des programmes de calcul (et de la programmation en g\u00e9n\u00e9ral), c&rsquo;est peut-\u00eatre bien le <em>flow programming<\/em>, initialement popularis\u00e9 <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Pure_Data\">dans la musique<\/a>, et de plus en plus pr\u00e9sent pour des applications plus g\u00e9n\u00e9ralistes comme <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Node-RED\">Node-RED<\/a>. Avec <a href=\"https:\/\/rodeofly.github.io\/flow974\/\">flow-974<\/a>, le programme de calcul pr\u00e9c\u00e9dent se repr\u00e9sente ainsi :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"733\" height=\"182\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2014\/09\/flowprogcalc1.png\" alt=\"\" class=\"wp-image-1043\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2014\/09\/flowprogcalc1.png 733w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2014\/09\/flowprogcalc1-300x74.png 300w\" sizes=\"auto, (max-width: 733px) 100vw, 733px\" \/><\/figure>\n\n\n\n<p>Pour la question 2, il suffit de remplacer le 7 \u00e0 gauche par -6 (par exemple en cliquant 13 fois sur la fl\u00e8che de d\u00e9cr\u00e9mentation) et lire la r\u00e9ponse \u00e0 droite :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"733\" height=\"177\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2014\/09\/flowprogcalc2.png\" alt=\"\" class=\"wp-image-1045\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2014\/09\/flowprogcalc2.png 733w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2014\/09\/flowprogcalc2-300x72.png 300w\" sizes=\"auto, (max-width: 733px) 100vw, 733px\" \/><\/figure>\n\n\n\n<p>Le flow programming permet de dessiner les combinateurs, qui sont des fonctions s&rsquo;appliquant \u00e0 des fonctions du m\u00eame type qu&rsquo;elles (voire \u00e0 elles-m\u00eames !). Voici quelques-uns de ces dessins :<\/p>\n\n\n\n<div data-wp-interactive=\"core\/file\" class=\"wp-block-file\"><object data-wp-bind--hidden=\"!state.hasPdfPreview\" hidden class=\"wp-block-file__embed\" data=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2014\/09\/flowprogramm.pdf\" type=\"application\/pdf\" style=\"width:100%;height:530px\" aria-label=\"Contenu embarqu\u00e9 flowprogramm.\"><\/object><a id=\"wp-block-file--media-5e5145f8-e5ac-46b7-9ea0-347f45b36eba\" href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2014\/09\/flowprogramm.pdf\">flowprogramm<\/a><a href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2014\/09\/flowprogramm.pdf\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-5e5145f8-e5ac-46b7-9ea0-347f45b36eba\">T\u00e9l\u00e9charger<\/a><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Interpr\u00e9teurs Sofus<\/h2>\n\n\n\n<p>Voici un interpr\u00e9teur Sofus en OCaml :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>let de = \"de\"\nlet par = \"par\"\nlet dans = \"dans\"\nlet mettre d dans x = x:=d\nlet incrementer x = x:=!x+1\nlet decrementer x = x:=!x-1\nlet augmenter x de d = x:=!x+d\nlet diminuer x de d = x:=!x-d\nlet multiplier x par d = x:=!x*d\nlet diviser x par d = x:=!x\/d\nlet doubler x = x:=!x*2\nlet tripler x = x:=!x*3\nlet quadrupler x = x:=!x*4\nlet quintupler x = x:=!x*5\nlet sextupler x = x:=!x*6\nlet septupler x = x:=!x*7\nlet octupler x = x:=!x*8\nlet nonupler x = x:=!x*9\nlet decupler x = x:=!x*10\n<\/code><\/pre>\n\n\n\n<p>Un <a href=\"https:\/\/my.numworks.com\/python\/alain-busser\/sofus\">autre<\/a>, en Python.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sofus (le nom est un hommage \u00e0 Sophus Lie), qui a sa cha\u00eene youtube, est \u00e0 la fois On programme en ligne, avec des blocs similaires \u00e0 ceux de Scratch, par exemple si on veut simuler la suite de Collatz, on place des blocs ainsi : Un clic sur le drapeau vert aura alors pour [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":573,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[22,52,68],"coauthors":[54],"class_list":["post-534","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-algorithmes-programmation-et-langages","tag-dnb","tag-resolution-de-problemes","tag-sofus"],"_links":{"self":[{"href":"https:\/\/iremi.univ-reunion.fr\/index.php?rest_route=\/wp\/v2\/posts\/534","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/iremi.univ-reunion.fr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/iremi.univ-reunion.fr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/iremi.univ-reunion.fr\/index.php?rest_route=\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/iremi.univ-reunion.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=534"}],"version-history":[{"count":22,"href":"https:\/\/iremi.univ-reunion.fr\/index.php?rest_route=\/wp\/v2\/posts\/534\/revisions"}],"predecessor-version":[{"id":1399,"href":"https:\/\/iremi.univ-reunion.fr\/index.php?rest_route=\/wp\/v2\/posts\/534\/revisions\/1399"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/iremi.univ-reunion.fr\/index.php?rest_route=\/wp\/v2\/media\/573"}],"wp:attachment":[{"href":"https:\/\/iremi.univ-reunion.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=534"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/iremi.univ-reunion.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=534"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/iremi.univ-reunion.fr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=534"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/iremi.univ-reunion.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcoauthors&post=534"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}