# CSci 1901: 5th Homework Due: Thursday, May 3 No late homeworks

The homework is to be done individually as a practice for the final exam. You can do it manually and/or using the computer. Hand in your answers (both the code and the result of running it) at the beginning of your lab. For test data, use the examples included with each problem and add some when none are given.
1. (20 points)
Write a procedure `insert-at!` that destructively inserts a given element into a list in a specified position. Assume that the positions are numbered from 0, and that the position specified is always 0 or positive. If the position is greater than the length of the list the procedure should return the list itself. It should work like this:
```
STk> (insert-at! 'k 3 '(b c m n))
(b c m k n)
STk> (insert-at! 'a 0 '(b c d e))
(a b c d e)
STk> (insert-at! 'a 7 '(b c d e))
(b c d e)
```
2. (10 points)
Repeat the previous question in Python.
3. (25 points)
Write a procedure `(bonus! table key-list)` to give a bonus of 100 points to the values of the keys that are included in the list `key-list`. Assume `table` is a table, as defined in the textbook.
The procedure should work like this: suppose you are given a table `frequent-flyers` containing names of people and their frequent flyer miles. The keys in `frequent-flyers` are symbols representing names, the values are miles. Suppose you are also given the list `names` of names of people who should receive a bonus of 100 miles. `(bonus! frequent-flyer names)` should increase by 100 the values of the miles in the table `frequent-flyers` for the people who appear in `names`. Nothing should be done for people listed in `names` but not in `frequent-flyers`. You have to use the selectors and mutators from the textbook to access the entries in the table.
4. (20 points) Repeat the previous question in Python using dictionaries.
5. (25 points)
Use dictionaries in Python to write a procedure which takes in a string and returns a list of pairs so that each character in the string is paired with its frequency in the string.
```>>> str2fqy('tables are dictionaries')
{'a': 3, ' ': 2, 'c': 1, 'b': 1, 'e': 3, 'd': 1, 'i': 3, 'l': 1, 'o': 1,
'n': 1, 's': 2, 'r': 2, 't': 2}
```