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 № 1Ok, 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)
.