⚙️ Ajoute quelques notes

pull/20/head
Laurent Bossavit 2017-08-01 15:35:43 +02:00
parent 63dcb5030b
commit 8d92b7bf3e
1 changed files with 21 additions and 1 deletions

View File

@ -36,6 +36,26 @@ describe('simplified tree walks', function() {
const Fx = daggy.tagged('Fx',['x'])
const unFix = R.prop('x')
// Chaque élément de notre liste est une définition:
const Def = daggy.taggedSum('Def', {
Formula: ['expr'],
Conditional: ['cond','expr'], // Applicable si
Blocked: ['cond','expr'], // Non applicable si
})
const {Formula, Conditional, Blocked} = Def
// Ce qu'on décrit est un framework de programmation déclarative: on stipule des
// définitions (salaire net = brut - cotisations) mais on les donne sans ordre
// impératif, on laisse au moteur le soin de calculer les dépendances
// Par contre, à l'exécution, il faut bien calculer des "effets de bord"
// pour rester performant: chaque évaluation d'une définition doit mettre
// à jour le 'dictionnaire' des valeurs connues, puis le mettre à disposition
// de la suite du calcul
// La partie droite d'une définition est une expression:
const Expr = daggy.taggedSum('Expr',{
Num: ['x'],
Add: ['x', 'y'],
@ -44,7 +64,7 @@ describe('simplified tree walks', function() {
// AnyOf: ['conditions'],
// AllOf: ['conditions'],
})
const {Num, Add, Var} = Expr;
const {Num, Add, Var} = Expr
// fold :: Functor f => (f a -> a) -> Fix f -> a
const fold = R.curry((alg, x) => R.compose(alg, R.map(fold(alg)), unFix)(x))