2010-06-22 9 views

Répondre

3

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).

+0

merci beaucoup de me rectifier !! –