>>> "SIGOURE" == SIGOURE Benoit <sigoure.benoit(a)lrde.epita.fr> writes:
> AddZero:
> - Plus(e, Int("0")) -> e
> + |[ e + 0 ]| -> |[ e ]|
Cool !
> EvalPlus:
> - Plus(Int(i), Int(j)) -> Int(<addS>(i, j))
> - EvalPlus:
> - Plus(Double(i), Int(j)) -> Double(<addR>(i, j))
> - EvalPlus:
> - Plus(Int(i), Double(j)) -> Double(<addR>(i, j))
> - EvalPlus:
> - Plus(Double(i), Double(j)) -> Double(<addR>(i, j))
> + |[ d1 + d2 ]| -> |[ r ]| where <addR>(d1, d2) => r
Très cool.
> Index: src/str/reals.str
> --- src/str/reals.str (revision 0)
> +++ src/str/reals.str (revision 0)
> @@ -0,0 +1,27 @@
> +module reals
> +
> +strategies
> +
> + // for some reason the following rules are only defined for integers
> + // in the stratego-lib. Here is their equivalant for reals.
equivalent. Emacs dispose de correction orthographique des chaînes et
des commentaires, je suppose de vim aussi.
> + addR = (string-to-real, string-to-real); addr; real-to-string
> + subtR = (string-to-real, string-to-real); subtr; real-to-string
> + mulR = (string-to-real, string-to-real); mulr; real-to-string
> + divR = (string-to-real, string-to-real); divr; real-to-string
> + gtR = where((string-to-real, string-to-real); gtr)
> + geqR = where((string-to-real, string-to-real); ?(x,x) <+ gtr)
> + ltR = where((string-to-real, string-to-real); not(?(x,x) <+ gtr))
> + leqR = where((string-to-real, string-to-real); not(gtr))
Pourquoi des where dans la seconde partie ?
> + /**
> + ** tests whether two reals are equal
> + ** => tests if there difference is less than 10^-7
> + ** operates on the input term (a, b)
> + ** eg: <real-eq> ("0.42", "0.43") -> fail
> + */
Ce sont des commentaires xDoc ça ?