lambdaspeech
::
why
1
|
list
|
login
|
load
|
|
{require my_library} {amelie} {center For english speakers, see [[start]].} _h1 [[quick_intro]] | why | [[once again|?view=tourna]] _p Voici quelques raisons d'accorder à '{lambda talk} un peu d'attention. _p '{lambda talk} est disponible sur tout navigateur web moderne, (Firefox par exemple), dans un environnement wiki '{lambda tank} facile à [[télécharger|?view=machine2]] (25ko, libre sous licence GPL), à paramétrer et à télécharger (100ko avec Filezilla par exemple, sans aucune dépendance externe), chez tout hébergeur internet fournissant le runtime PHP, [[free.fr|http://www.free.fr/]] par exemple. _p Pour quoi faire ? _ul un site web dynamique fait de HTML/CSS/SVG/DOM/JAVASCRIPT/ _ul des posters, des diaporamas, supports de cours, de présentations, _ul un carnet de notes dans une syntaxe à la Markdown _ul de beaux graphiques, des formes 3D, calculer Π avec 500 décimales, _ul les exercices algorithmiques des classes prépas scientifiques, cf [[pi]], _ul construire un langage de programmation à partir de zéro, ou presque, _ul analyser quelques concepts clés d'un langage de programmation, _ul créer un papier au format requis par les revues scientifiques _ul etc... _p '{lambda talk} est un langage de programmation fonctionnelle bénéficiant d'une syntaxe parenthésée préfixée unique, régulière, cohérente. C'est un dialecte du {b λ-calcul}{sup 1936} dans lequel toute expression est faite de {b mots}, {b d'applications} et {b d'abstractions} : _ul 1) un {b mot} est un groupe de caractères hors espaces et accolades {code '{}} et est évalué à lui-même, point final de toute évaluation, _ul 2) une {b application} est une forme normale {code '{first rest}}, l'expression {code rest} est évaluée puis appelée par la fonction associée à l'expression {code first} pour retourner un ou plusieurs mots, _ul 3) une {b abstraction} est une forme spéciale {code '{lambda {mots} expression}} évaluée à un mot référençant une fonction anonyme qui sélectionne les {code mots} dont les occurences dans {code expression} seront remplacées par les valeurs fournies lors de l'invocation de la fonction. {blockquote {center ♥♥♥ Un peu perdu ? Lisez-donc la page [[tourna]] ! ♥♥♥}} _p Ça va mieux ? Alors on peut continuer ! La {b fonction} est l'élément clé d'un langage qui se veut fonctionnel. Dans l'implémentation qui en est faite ici une fonction (une lambda) peut être appelée en argument d'une autre fonction, retournée par une fonction et créée dynamiquement. Elle peut être invoquée sur un nombre de mots/valeurs qui peut être différent du nombre de ses arguments. S'il est inférieur elle retourne une nouvelle fonction mémorisant les valeurs reçues et attendant les valeurs manquantes (appel partiel). S'il est supérieur les valeurs surnuméraires sont ajoutées en liste dans le dernier argument (arité variable). Une fonction est pure et indépendante de tout contexte. Elle ne connait pas de variable libre (supposée définie dans un contexte appelant), elle ne connait que ses arguments et les mots du dictionnaire qui définit le contexte global. Une fonction ne crée ni effet de bord ni fermeture, laquelle est toujours compensable via un appel partiel. Les fonctions peuvent être composées pour définir des {b structures de données} (paires, listes, arbres) et des {b évaluations différées} conduisant à des structures de contrôle et à la {b récursion}, avec lesquelles peuvent être créés de nouveaux types comme les nombres (entiers naturels, rationnels, complexes) et leurs opérateurs associés. _p Au final '{lambda talk} envoie une séquence de mots, constituant un code HTML/CSS/JAVASCRIPT valide, au navigateur web qui procède à l'évaluation complémentaire et à l'affichage. Tel un {i nain juché sur les épaules d'un géant}, simple interface avec les multiples syntaxes qui font des navigateurs de puissantes machines. _p Quelques formes spéciales sont ajoutées pour faciliter l'écriture, la lecture et la maintenance du code _ul '{def nom expression} associant un nom global à une ou plusieurs expressions _ul '{if expression1 then expression2 else expression3} facilitant l'écriture de structures de contrôle _ul '{let { {nom expression} ... } expression} permettant de créer des noms locaux _ul '{quote expression} ou ''{expression} empêchant toute évaluation de expression _ul '{macro regexp to expression} créant des syntaxes alternatives, simplifiées, spécifiques _ul '{script JS code} ajoutant du code Javascript, de nouvelles primitives _ul '{style CSS code} ajoutant du code CSS modifiant l'apparence des pages _ul '{require page_1 ...} ajoutant à une page du code écrit dans d'autres _p Dans la version '{lambda speech} le dictionnaire contient plus de 150 primitives (math, html, css, svg, ...) et est étendu via des fonctions utilisateurs et/ou des primitives regroupées en bibliothèques stockées dans quelques pages wiki. _p Bienvenue dans le projet '{lambda way}. _p {i Alain Marty | 2018/10/15}
lambdaspeech v.20200126