The lab is done in groups of 2 or 3. In the beginning of each file please write (in comments) the names fo all group members.

At the end of the lab please send me **and your group
partner(s)** all your Racket files as e-mail
attachments. My e-mail is elenam at
morris.umn.edu. The subject of your e-mail must be "1301
Lab 6" followed by "Final" or "Not final", depending on whether this
is a final submission or you are still working on it. If you need to
finish it, make sure to set up a time with your group partner(s) to
finish the lab.

These problems use recursion. Use the examples we did in class as sample
code. All functions must have signatures, descriptions, and
check-expects (add check-expects as needed).

Note that `list`

function (used in check-expects below)
is an easy way to create a list of several
elements without having to repeat `cons`

many times.
As an example of how it works, `(list 2 3)`

creates
a list `(cons 2 (cons 3 empty))`

.

`product`

that consumes a list of numbers and returns their product. It returns 1 for an empty list.
```
(check-expect (product (list 2 3 -1)) -6)
(check-expect (product (list 4 6 0 8)) 0)
(check-expect (product empty) 1)
```

**Question 2 (4 points)**
Write a function `sum-non-negative`

that adds up all non-negative
numbers in a list.

```
(check-expect (sum-non-negative (list -2 3 0 -1 5)) 8)
(check-expect (sum-non-negative (list 4 8)) 12)
(check-expect (sum-non-negative (list -1 -2)) 0)
```

**Question 3 (4 points)** Write a function `count-odd`

that consumes a list of numbers and returns the number of odd numbers in the list.

```
(check-expect (count-odds (list 2 3 1 5 0)) 3)
(check-expect (count-odds (list 4 6 8)) 0)
(check-expect (count-odds empty) 0)
```

**Question 4 (4 points)** Write a function `sum-x-coords`

that consumes a list of positions and returns the sum of their x coordinates.

```
(check-expect (sum-x-coords (list (make-posn 10 20) (make-posn 20 50))) 30)
(check-expect (sum-x-coords (list (make-posn 10 -20) (make-posn 10 0))) 20)
(check-expect (sum-x-coords empty) 0)
```

**Question 5 (4 points)** Write a function `first-odd`

that consumes a list of numbers and returns the first odd number. Use the predefined function `odd?`

to determine if a number is odd. If no number in the list is odd, return #false.

```
(check-expect (first-odd (list 2 3 1 5 0)) 3)
(check-expect (first-odd (list 4 6 8)) #false)
(check-expect (first-odd empty) #false)
```

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.