## CSci 4651 - Lab 1.

#### September 5. Due Monday, September 8 at 11:59pm

What to submit and when:

- All submissions are electronic: by e-mail to elenam at morris.umn.edu. Please do not delete your e-mail from "Sent mail" until the end of the semester.
- At the end of the lab send me the results of your work. Please indicate if this is your final submission.
- If your submission at the end of the lab time was not final, please send mea final copy before the due time. Please use the subject "4651 Lab N", where N is the lab number.

### Lab assignment

#### Problem 1

Define and test function `swap`

. It takes a single argument. If it is an atom (i.e. not a pair), the function just returns the argument. If it's a pair, the function switches the car and the cdr. For instance:

```
(swap (cons 5 8))
>(8 . 5)
(swap '(2 3 4))
>((3 4) . 2) ; Why?
(swap 5)
> 5
```

#### Problem 2

`deep-swap`

is a recursive version of swap: it recursively swaps all cons-cells in the arguments. For instance:

```
(deep-swap (cons (cons 3 4) (cons 5 6)))
> ((6 . 5) 4 . 3)
```

Test this function carefully. What would happen if it's applied to a list? Please test your finidngs and explain the result by drawing the resulting structure.

*Try to guess* what happens if the function is applied as follows:

```
(define x (cons 3 4))
(define y (cons x x))
(deep-swap y)
```

Now try it. Is that what you expected? Can you explain the results?

#### Problem 3

Type in the following definition:

```
(define z (cons + '(2 3)))
```

What is z? Test it. How can we get the result of the expression, given z (i.e. to get the result 5)? Please submit your Scheme code that computes the value of z.

This page is a part of CSci 4651
course web site.

The views and opinions expressed in this page are strictly those of the page author. The contents of this page have not been reviewed or approved by the University of Minnesota.