Surtout que l'on parle du langage, ça n'empêche pas de faire une arithmétique loufoque dans une bibliothèque.
Dès qu'on a des fonctions polymorphes dans le langage, on peut faire une implémentation loufoque de l'arithmétique (mai l'arithmétique en question n'est pas loufoque). L'idée consiste à identifier un entier avec le principe de définition par récurrence (n x f = f (f ...(f x)), l'entier n applique n fois la fonction f à x) :
moduleN=structtypet={n:'a.'a->('a->'a)->'a}letzero={n=funz_->z}letsuccm={n=funzs->m.n(sz)s}letfold{n}=nletrecnat=function0->zero|n->succ(nat(predn))letintn=foldn0(funx->x+1)letevenn=foldntruenotletoddn=foldnfalsenotletaddnm=foldmnsucc(* n + m = n + 1 + ... + 1 *)letmulnm=foldmzero(addn)(* n * m = 0 + n + ... + n *)letexpnm=foldm(succzero)(muln)(* n ** m = 1 * n * ... * n *)let(+),(*),(**)=add,mul,expend
à l'usage :
N.(even(nat5));;-:bool=falseN.(even(nat4));;-:bool=trueN.(int(nat2**nat8+nat5*nat2));;-:int=266(* la suite de fibonnaci *)letfibon=fstN.(foldn(zero,nat1)(fun(x,y)->(y,x+y)));;valfibo:N.t->N.t=<fun>N.(int(fibo(nat10)));;-:int=55
:-)
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.
[^] # Re: Ha ouais, quand même...
Posté par kantien . En réponse au journal Une backdoor vient d’être trouvée dans un paquet npm connu. Évalué à 5.
Dès qu'on a des fonctions polymorphes dans le langage, on peut faire une implémentation loufoque de l'arithmétique (mai l'arithmétique en question n'est pas loufoque). L'idée consiste à identifier un entier avec le principe de définition par récurrence (
n x f = f (f ...(f x)), l'entiernappliquenfois la fonctionfàx) :à l'usage :
:-)
Sapere aude ! Aie le courage de te servir de ton propre entendement. Voilà la devise des Lumières.