+
1
|
list
|
skin
|
login
|
editor
α-wwwiki
::
fonctions
user:none
(3323 bytes)
_h1 fonctions _p Le langage "Lambdatalk_lite" d'alphawiki reconnait la plupart des balises HTML, quelques balises MathML et quelques fonctions supplémentaires, à ce jour : date, show, lightbox, lib, define. La dernière est particulièrement importante en ce qu'elle permet d'étendre (presque) à volonté les fonctionnalités de lambdatalk. En voici le code : {pre °° xhtml['define'] = function () { var tab = rest.split( ' ' ); var name = tab.shift(); tab = tab.join( ' ' ); var args = tab.match( /(.*?)/ ); var body = tab.replace( args[0], '' ); args = args[0].replace('(','') .replace(')','') .replace(/ /g,','); xhtml[name] = function () { var lambda = Function( args, body ); rest = rest.split( ' ' ); return lambda.apply( null, rest ); }; return 'OK'; }; °°} _p Les exemples qui suivent en donnent des exemples d'utilisation. A ce jour, il est donc possible de coder en ligne des fonctions respectant la syntaxe °°{first rest}°°. Il y a des conditions à respecter : {pre • la syntaxe : °°{define name (args) body}°° avec : • name est le nom de la fonction • args est une liste d'arguments séparés par des espaces • body est une suite d'expressions javascript avec, pour l'instant, une importante restriction : pas d'accolades °°{ et }°° ! } _p La restriction sur les accolades est évidemment rédhibitoire : impossibilité de créer des blocs, des fonctions internes, etc... A suivre donc ! _p {b Note :} La balise HTML "input" fournit un autre moyen d'écrire en ligne du code Javascript, sans les restrictions de la fonction "define", cf pages [[input]], [[canvas]]. _h2 quelques exemples {pre _h4 carre °°{define carre (x) return x*x;}°° -> {define carre (x) return x*x;} °°{carre 12}°° -> {carre 12} _h4 cube °°{define cube (x) return x*x*x;}°° -> {define cube (x) return x*x*x;} °°{cube 12}°° -> {cube 12} _h4 cosinus °°{define cos (a) var res = Math.cos( Math.PI/180*a ); return (Math.abs(res)<0.0001)? 0 : res; }°° -> {define cos (a) var res = Math.cos( Math.PI/180*a ); return (Math.abs(res)<0.0001)? 0 : res; } °°{cos 0}°° -> {cos 0} °°{cos 45}°° -> {cos 45} °°{cos 90}°° -> {cos 90} °°{cos 135}°° -> {cos 135} °°{cos 180}°° -> {cos 180} _h4 hypothenuse c{sup 2}=a{sup 2}+b{sup 2} °°{define hypo (a b) return Math.sqrt( a*a+b*b ); }°° -> {define hypo (a b) return Math.sqrt( a*a+b*b ); } °°{hypo 3 4}°° -> {hypo 3 4} _h4 equation ax{sup 2}+bx+c=0 °°{define equation (a b c) var d = b*b - 4*a*c; var res = 'no real roots'; if (d>=0) res = 'x0=' + (-b - Math.sqrt( d ))/(2*a) + ' and x1=' + (-b + Math.sqrt( d ))/(2*a); return res; }°° -> {define equation (a b c) var d = b*b - 4*a*c; var res = 'no real roots'; if (d>=0) res = 'x0=' + (-b - Math.sqrt( d ))/(2*a) + ' and x1=' + (-b + Math.sqrt( d ))/(2*a); return res; } °°{equation 1 -1 -1}°° -> {equation 1 -1 -1} °°{equation 1 -1 1}°° -> {equation 1 -1 1} _h4 factorielle n! °°{define fac (n) return (n<1)? 1 : n*arguments.callee(n-1);}°° -> {define fac (n) return (n<1)? 1 : n*arguments.callee(n-1);} °°{fac 6}°° -> {fac 6} } {lib}