Q:

Lisp Scheme using (string-set!) Error Encountered

I am new to (Lisp) scheme programming and have been following the tutorial. Everything went well until I use string-set!
String-set! is use to replace the character at index. An example of what I did below:
Welcome to Racket v5.1.3.
> (define greeting "Hello; Hello!")
> (string-set! greeting 1 #\a)
string-set!: expects type <mutable string> as 1st argument, given: "Hello; Hello!"; other arguments were: 1 #\a

 === context ===
/usr/share/racket/collects/racket/private/misc.rkt:85:7

> greeting
"Hello; Hello!"
> 

When (string-set! greeting 1 #\a) executed, it should replace the first 'e' to 'a' according to the tutorial. The output should be:
> greeting
"Hallo; Hello!"

But instead I am getting the error string-set!: expects type <mutable string> as 1st argument.
Am I doing it the wrong way?

A:

As per the Racket documentation:

A string can be mutable or immutable. When an immutable string is provided to a procedure like string-set!, the exn:fail:contract exception is raised. String constants generated by the default reader (see Reading Strings) are immutable, and they are interned in read-syntax mode.

You can use string-copy to make a copy of a string, and this always returns a mutable string.
(define greeting (string-copy "Hello; Hello!"))

