/ / Evaluation de l'ordre normal et de l'ordre applicatif dans Scheme - lambda, scheme, raquette

Évaluation de l'ordre normal et de l'ordre d'application dans Scheme - lambda, schéma, raquette

Pour le 1er exemple donné sur le site: Voir le site, ma compréhension est que l'ordre normal évalue à [6;1;1] et l'ordre d'application évalue à [6;2;2]

Quelqu'un peut-il s'il vous plaît confirmer mon évaluation?

Cordialement,
darkie

Réponses:

3 pour la réponse № 1

Ok, passons en revue les étapes d'évaluation (cons res v) avec évaluation d'ordre normal:

v a été défini comme (cons a (cons b ’())), nous avons donc cons res (cons a (cons b ’())). res est défini comme (foo ...), nous avons donc

(cons (foo (begin (set! a (+ a 1)) a)
(begin (set! b (* b 2)) b))
(cons a (cons b ’())))

enfin foo x y est défini comme (+ x y y), donc en substituant (begin (set! a (+ a 1)) a) pour x et (begin (set! b (* b 2)) b) pour y, on a:

(cons (+ (begin (set! a (+ a 1)) a)
(begin (set! b (* b 2)) b)
(begin (set! b (* b 2)) b))
(cons a (cons b ’())))

Alors maintenant, évaluons ceci: pour obtenir le résultat des inconvénients, nous devons d'abord évaluer son premier argument, (+ ...). Nous devons donc d'abord évaluer le premier argument de + lequel est (begin (set! a (+ a 1)) a). Cela équivaut à 2, donc la valeur de a est maintenant 2 et le premier argument à + est également 2. Maintenant, nous faisons la même chose avec le deuxième argument. Cela évalue également à 2 et définit b à 2. Le troisième argument est (begin (set! b (* b 2)) b) encore une fois, donc la valeur de b est maintenant 4 et le troisième argument est 4. Ainsi, le premier argument à cons est le résultat (+ 2 2 4), qui est 8 et les valeurs de a et b sont 2 et 4.

Maintenant, nous devons évaluer le deuxième argument, (cons a (cons b ’())). Donc, puisque la valeur de a et b sont 2 et 4, le résultat final est (8 2 4).