UNB/ CS/ David Bremner/ teaching/ cs2613/ labs/ Lab 5

# Setup

• make a directory `labs/L05` inside your `~/cs2613` git repository
• All of your work from today should be committed in that directory (and pushed before you leave).

# Substitute in a list

Time
25 minutes
Activity
Individual work
Summary

Complete FICS Exercise 13.

Recall the template for structural recursion.

```(define (my-list-fn lst)
(cond
[(empty? lst) ...]
[(cons? lst) ... (first lst) ...
... (my-list-fn (rest lst)) ...]))
```

Here is a test case based on the linked test

```(check-expect
(substitute 3 "three" (list "four" 3 4 "three" 3))
(list "four" "three" 4 "three" "three"))
```

# Uniquifying lists

Time
25 minutes
Activity
Individual work
Summary

Complete FICS Exercise 15. Although probably not intended by the original question, use the built-in BSL function `member?` to simplify your solution. Otherwise use only the constructs specified in Exercise 14, and structural recursion. My solution contains an auxilary function (also using structural recursion) to remove all copies of a particular value from a list. Here is one test case derived from the linked text.

```(check-expect
(unique-right
(list 1 4 2 1 5 4))
(list 2 1 5 4))
```

# Add an element to all lists

Time
25 minutes
Activity
Individual work
Summary

Recall the template for structural recursion on lists

```(define (my-list-fn lst)
(cond
[(empty? lst) ...]
[(cons? lst) ... (first lst) ...
... (my-list-fn (rest lst)) ...])
```

Use this template to write a function `cons-all` that adds a given element to the front of each given sublist. This is related to FICS Exercises 23-25 (but you only need to write `cons-all`, not do those exercises).

The following test case illustrates the use of `cons-all`. You will need to use the language `#lang htdp/bsl+` or "Beginning Student with List Abbreviations" or replace the use of `'` in the following.

```(check-expect (cons-all 3 '((2 4) () (5)))
'((3 2 4) (3) (3 5)))
```