return page history
α-wwwiki
::
history/lambdaway/20131020-210318.txt
editor : alpha [82.253.73.50] 2013/10/20 21:03:18 {center {i en cours d'écriture !}} _h1 λy {div {@ style="display:none;"}{define cod () °° var args = [].slice.call(arguments).join( ' ' ); var style= "font:normal 0.8em arial;" +"background:#888;" +"color:#fff;" +"text-align:center;" +"padding:0 5px;" +"border:1px solid;" +"box-shadow:0px 0px 2px black;" +"-webkit-border-radius:10px;" +"-moz-border-radius:10px;" +"border-radius:10px;"; return '{span {@ style="' + style + '"}' + args + '}'; °°}} _p Tentative de description simple et non ambiguë de ce qui fait l'essentiel d'un évaluateur de S-expressions. Ce qui n'est pas si simple ! _h3 évaluation immédiate _p L'évaluation d'une S-expression {cod °°{first rest}°°} consiste en l'application de l'opérateur {cod first} aux arguments contenus dans {cod rest}. Le terme {cod first} est un nom de fonction ou une S-expression produisant un nom de fonction, {cod rest} est une chaîne de mots (suite de caractères sans espace), de nombres (au sens où ils sont compris par l'environnement) et de S- expressions. L'évaluation se fait en commençant par les S-expressions terminales (ne contenant pas de S-expression) jusqu'à la S-expression englobante. Le résultat est une chaîne de mots. _p Dans l'expression {cod °°{+ 1 2}°°} le symbole {cod +} appartient au dictionnaire de fonctions prédéfinies, {cod 1 et 2} sont deux symboles reconnus comme étant des nombres et évalués à eux-mêmes. L'appel de la fonction avec les deux arguments {cod 1 et 2} produira donc la valeur {cod 3} ! _h3 évaluation différée _p L'expression {cod °°{+ a b}°°} contient deux symboles {cod a et b}, qui ne sont ni des nombres ni des S-expressions. Leur valeur n'est pas connue au moment de l'écriture de la S-expression et son évaluation doit être reportée. On la mémorise dans le dictionnaire sous la forme d'une fonction, un enclos, une fermeture, une "lambda", une "liaison" associant à tous les termes {cod a et b} contenus dans le corps les valeurs fournies à l'appel de la fonction, par exemple {cod 1 et 2}. _p L'expression {cod °° {lambda {:a :b} {+ :a :b} °°} crée cette fonction en lui attribuant un nom aléatoire, du type {cod lambda_12345}, inconnu en principe de l'utilisateur, une fonction anonyme. L'expression {cod °°{lambda_12345 1 2}°°} produirait ainsi la valeur {cod 3}. Et la fonction anonyme retourne ensuite dans les limbes du "garbage collector". _p De façon plus pratique, l'expression {cod °°{def add {lambda {:a :b} {+ :a :b}}°°} associera le nom {cod add} à cette fonction. Et ceci de façon permanente : l'expression {cod °° {add 1 2}°°} produira {cod 3}, {cod °°{add 3 4}°°} produira {cod 7}, etc. _h3 extension du dictionnaire _p De façon générale, {cod °°{def nom expression}°°} associe une expression à un nom, augmentant ainsi le dictionnaire. Si l'expression est évaluable (elle ne fait appel à aucune valeur indéfinie) elle est évaluée sous forme de constante. Sinon, elle est mémorisée sous la forme d'une fonction à l'aide de l'opérateur {cod lambda}. _p Ecrire un programme, c'est créer un ensemble de fonctions agissant sur un ensemble de données. On notera la similitude des notations entre les opérateurs et les données, on parle d'homo-iconicité. C'est le point commun des dialectes du LISP défini au départ en 1960 sur 7 formes primitives. Lambdatalk bénéficie de la fondation confortable des navigateurs WEB et les langages intégrés, le HTML, le CSS, et le LISP habillé en C malencontreusement appelé JavaScript. Lambdatalk dispose de 50 opérateurs construits sur le HTML, 30 opérateurs construits sur les fonctions mathématiques de JavaScript, ajoute 20 nouveaux opérateurs et 3 formes spéciales (lambda, def, if). Associé au moteur PHP d'alphawiki, le code de lambdatalk, visible {b [[ICI|data/lambdatalk/lambdatalk.js]] } et réduit à très peu de lignes (une centaine pour l'évaluateur, environ quatre cent pour le dictionnaire) se révèle suffisant pour composer et coder de façon confortable des pages multimedia interactives pouvant devenir complexes. _p à suivre ...