Ok, nous allons passer par les étapes d'évaluation (cons res v)
avec évaluation-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)
, en substituant (begin (set! a (+ a 1)) a)
pour x
et (begin (set! b (* b 2)) b)
pour y
, nous obtenons:
(cons (+ (begin (set! a (+ a 1)) a)
(begin (set! b (* b 2)) b)
(begin (set! b (* b 2)) b))
(cons a (cons b ’())))
nous donc maintenant nous allons évaluer 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 +
qui est (begin (set! a (+ a 1)) a)
. Cela évalue à 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 second argument. Cela évalue également à 2 et définit b à 2. Le troisième argument est (begin (set! b (* b 2)) b)
à nouveau, donc la valeur de b
est maintenant 4 et le troisième argument est 4. Donc 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)
.
merci beaucoup de me rectifier !! –