Test de coloration du code Anubis

Message de test de la coloration du code Anubis.


Commençons par un petit dérivateur formel en Anubis :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
// a simple formal derivator
 
// functions from R to R
public type RtoR :
   x,
   cst(Int),
   ~ RtoR,
   RtoR + RtoR,
   RtoR * RtoR,
   sin(RtoR),
   cos(RtoR),
   exp(RtoR).
 
 
// automagically generated
public type RtoR_recu($T) :
   recu
   (
      $T x,
      $T cst,
      ($T) -> $T neg,
      ($T,$T) -> $T add,
      (RtoR,$T,RtoR,$T) -> $T mul,
      (RtoR,$T) -> $T sin,
      (RtoR,$T) -> $T cos,
      (RtoR,$T) -> $T exp
   ).
 
// automagically generated
public define $T recu (RtoR f,RtoR_recu($T) d)
   =
if f is
{
   x then x(d),
   cst(z) then cst(d),
   ~ u    then neg(d)(recu(u,d)),
   u + then add(d)(recu(u,d),recu(v,d)),
   u * then mul(d)(u,recu(u,d),v,recu(v,d)),
   sin(u) then sin(d)(u,recu(u,d)),
   cos(u) then cos(d)(u,recu(u,d)),
   exp(u) then exp(d)(u,recu(u,d))
}.
 
 
public define RtoR deriv (RtoR f)
   =
recu
(
   f,
   recu
   (
      cst(0),
      cst(1),
      (RtoR du) |-> ~ du,
      (RtoR du,RtoR dv) |-> du + dv,
      (RtoR u,RtoR du,RtoR v,RtoR dv) |-> du * v + u * dv,
      (RtoR u,RtoR du) |-> du * cos(u),
      (RtoR u,RtoR du) |-> ~ du * sin(u),
      (RtoR u,RtoR du) |-> du * exp(u)
   )
).

J'attire l'attention du lecteur sur le fait que la fonction deriv n'est  pas directement récursive, nulle part dans son corps elle appelle la fonction deriv !

En effet, toute la récursion est encapsulée dans le récurseur recu.

Le second exemple, à savoir les ensembles totalement ordonnés, illustre un ensemble plus complet de récurseurs : accu, fold, cata, recu et para.

Spoiler Afficher/Masquer

Le dernier exemple, à savoir un tax-maximum fusionnable, illustre le récurseur fuse.

Spoiler Afficher/Masquer

Je laisse le soin au lecteur de vérifier que les fonctions (assez avancées) de ces deux derniers exemples ne font appel à aucune récursion ni aucune itération.

au talentueux webmaster qui a implémenté la coloration OCaml, Anubis, Coq ainsi que la citation de code dans le texte, sur ma simple demande.  

Laissez un commentaire

1 Commentaire

Laissez un commentaire

Vous devez être connecté pour commenter sur le Refuge. Identifiez-vous maintenant ou inscrivez-vous !