Je rencontre des problèmes avec la mise en œuvre de la différenciation automatique en F #. Je pense que le problème est que l'évaluation n'est pas «paresseuse».F # recursion à l'intérieur de la définition de type
Voici mon code:
type Diff =
{d : double; df : Diff}
static member (+) (x : Diff, y : Diff) =
{d = x.d + y.d; df = x.df + y.df}
static member (-) (x : Diff, y : Diff) =
{d = x.d - y.d; df = x.df - y.df}
static member (*) (x : Diff, a : double) =
{d = x.d * a; df = x.df * a}
static member (*) (x : Diff, y : Diff) =
{d = x.d * y.d; df = (x.df * y) + (y.df * x)}
let rec dZero = {d = 0.0; df = dZero}
let dConst x = {d = x; df = dZero}
let dId x = {d = x; df = dConst 1.0}
let test = dId 5.0
let add (x:Diff) = (x+x).d
Si j'essaie d'utiliser « ajouter test » Je reçois une erreur de débordement de la pile, ce qui je pense est en baisse à la définition de (+) à l'intérieur mon type se reposant sur '+'.
Y at-il un moyen de résoudre ce problème? Toute aide serait grandement appréciée.
Un grand merci, Ash