# Guided Practice 11.1

Imagine we are working in a class called Class1%, with init-fields x, y, and z (all containing integers).

Consider the following method definition:

```;; Number -> Class1%
;; GIVEN: a number u
;; RETURNS: an object just like this one, except that the new x field contains
;; x+y, and the new y field contains z+u.
(define/public (method1 u)
(new Class1%
[x (+ x y)]
[y (+ z u)]
[z z]))
```

Your task is to transform this into an imperative method using the Void transform. The new contract and purpose statement are:

```;; Number -> Void
;; GIVEN: a number u
;; EFFECT: alters the fields of this object so that  the new x field
;; contains the value of x+y, and the new y field contains the value
;; of z+u.

;; EXAMPLE: if obj1 has fields x=10, y=20, and z=100, then calling
;; (send obj1 method1 5)
;; should leave obj1 with fields x=30, y=105, z=100.
```

Which of the following are correct versions of the new method?

```;;; Version 1:

(define/public (method1 u)
(new Class1%
[x (+ x y)]
[y (+ z u)]))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; Version 2:

(define/public (method1 u)
(set! x (+ x y))
(set! y (+ z u)))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; Version 3:

(define/public (method1 u)
(set! x (+ x y))
(set! y (+ z u))
(set! z z))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; Version 4:

(define/public (method1 u)
(set! x (+ x y))
(set! z z)
(set! y (+ z u)))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;; Version 5:

(define/public (method1 u)
(set! y (+ z u))
(set! x (+ x y)))

```

[ANSWER]

Last modified: Thu Nov 13 13:15:36 Eastern Standard Time 2014