---
title: Drill 9 Solution
tags: Drills-F20, 2020
---
# Drill 9 Solution
## Question 1
Given this function:
```
fun list-len(lst :: List)-> Number:
cases(List) lst:
| empty => 0
| link(first, rest) => 1 + list-len(____)
end
end
```
Fill in the blank so that list-len correctly calculates the length of lst.
::: spoiler Answer
`rest`
In order to calculate the length of lst, we add 1 to the length of the rest of lst.
:::
## Question 2
Given this function:
```
fun list-product(lst :: List)-> Number:
cases(List) lst:
| empty => 1
| link(first, rest) => ____ * list-sum(rest)
end
end
```
Fill in the blank so that list-sum correctly computes the product of all the value in lst.
::: spoiler Answer
`first`
To get the product of all the values in lst we multiply first by the product of the rest of lst.
:::
## Question 3
Is
```
link(3, 4)
```
a valid list?
( ) Yes
( ) No
::: spoiler Answer
( ) Yes
(X) No
No--the second argument of link needs to be of type List.
:::
## Question 4
Given this code:
```
fun is-member(lst :: List, item :: Number)-> Boolean:
cases(List) lst:
| empty => Blank1
| link(first, rest) => (first == Blank2) or (is-member(Blank3, Blank4)
end
end
```
Fill in the blanks such that is-member correctly returns true if item is a member of lst, and false if otherwise.
Blank1: ____
Blank2: ____
Blank3: ____
Blank4: ____
:::spoiler Answer
Blank1: `false`
Blank2: `item`
Blank3: `rest`
Blank4: `item`
If lst is empty, then the function has finished going though the entire list and returns false. Otherwise, the functions checks if first is equal to item. If it is, the function returns true, otherwise it makes a recursive call on the rest of the list.
:::