Question: I am trying to create a procedure that has a user input a non-empty string and then returns a random letter from the input in a substring of length one.

i.e. 

```
(pick-at-random "word")

~"w"

(pick-at-random "word")

~"r"

```

So far I've got:

```
    (define pick-at-random
      (lambda (s)
        (substring s (random(string-length s)) ())))

```

This gives me the position of the letter I want to display and I feel like where the () is, I should have some variable representing the start value of the substring and then add one to it. However, I don't know how to do this. Simply put, I am asking how I can limit the substring to length one while using the random function in the start value.

Answer: 
You may use `let` to bind the random number to a variable.

```
(define pick-at-random
  (lambda (s)
    (let ((index (random (string-length s))))
      (substring s index (+ index 1)))))

```
The prior two answers are fine. Alternatively, you could break this problem into two problems:

* Develop the function "nth-char" that accepts a word and an index, and returns a string containing the nth character of the word.
* Develop the function "pick-at-random" that does what you describe. (Incidentally, I think a name such as "random-char" is somewhat better than "pick-at-random".)

This decomposition solves the problem you describe, by making it an argument to another function.

"Under the hood", this is the same solution as the one that uses "let".