Je voudrais savoir si Delphi 2009 supporte la récursion générique.
Je m'explique.
J'ai inventé un nouveau TAD, le dictionnaire réversible, actuellement codé en Objective Caml.
Je n'ai que Delphi 5 à ma disposition (donc pas de généricité du tout).
Mon code traduit en Delphi 2009 devrait ressembler à quelque chose comme ceci:
Code delphi : Sélectionner tout - Visualiser dans une fenêtre à part
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 type TRevMap<A,B> = class(TObject) public function Insert(const X:A; const Y:B):TRevMap<A,B>; private U: A; V: B; Left,Right: TRevMap<B,A>; end; (* Insert s'appelle elle-même mais en inversant les rôles de X et Y *) (* ce qui est tout à fait cohérent avec la définition du type TRevMap *) (* qui inverse les types A et B pour ses sous-arbres gauche et droit *) function TRevMap<A,B>.Insert(const X:A; const Y:B):; begin if X < U then if Left <> nil then Left := Left.Insert(Y, X) else begin Left := TRevMap<B,A>.Create; Left.U := Y; Left.V := X end else if Right <> nil then Right := Right.Insert(Y, X) else begin Right := TRevMap<B,A>.Create; Right.U := Y; Right.V := X end; Result := self end;
Cependant ce code risque de ne pas compiler si Delphi 2009 ne supporte pas la récursion générique (appel récursif avec des arguments réels de type différent du type déclaré en en-tête).
D'où la question simple: Delphi 2009 supporte-t-il la récursion générique
(vous pouvez transformer la récursion en boucle si cela vous amuse, mais j'ai bien peur que ça ne change rien du tout à ma question)
Partager