Hi. Can I please get some help?

"Write a function MID-ADD1 that adds 1 to the middle element of a

three-element list.

For example, (MID-ADD1 ’(TAKE 2

COOKIES)) should return the list (TAKE 3 COOKIES). Note: You

are not allowed to make MID-ADD1 a function of three inputs. It

has to take a single input that is a list of three elements."

Here's what I came up with:

(defun mid-add1 (l) (+ 1 (car (cdr l))))

This only returns the modified element. How can I get the modified list?

## Add 1 to the middle element of a list

**Forum rules**

Please respect your teacher's guidelines. Homework is a learning tool. If we just post answers, we aren't actually helping. When you post questions, be sure to show what you have tried or what you don't understand.

### Re: Add 1 to the middle element of a list

Construct a new list. Include the original head, new middle, and original tail.

There are ways to destructively modify the middle value in the original list (setf ...), but I think the new list is what your instructor is looking for.

If done right, the amount of code is about the same either way.

There are ways to destructively modify the middle value in the original list (setf ...), but I think the new list is what your instructor is looking for.

If done right, the amount of code is about the same either way.

### Re: Add 1 to the middle element of a list

The clearest would be to
Of course you can just use accessors:

Code: Select all

```
(defun mid-add1 (list)
"Adds 1 to the middle element of a
three-element list."
(assert (and (listp list) (= (length list) 3)) (list) "~a must be a 3 element list" list)
(destructuring-bind (first-element mid-num third-element) list
(assert (numberp mid-num) (list mid-num) "The second element of ~a must be a number. Got ~a" list mid-num)
(list first-element (1+ mid-num) third-element)))
```

Code: Select all

```
(defun mid-add1 (list)
"Adds 1 to the middle element of a
three-element list."
(assert (and (listp list)
(= (length list) 3)
(numberp (second list))) (list) "~a must be a 3 element list with the second element being numeric" list)
(list (first list) (1+ (second list)) (third list)))
```

I'm the author of two useless languages that uses BF as target machine.

Currently I'm planning a Scheme compiler :p

Currently I'm planning a Scheme compiler :p