#
Equal? as a procedure
^{
}

Two lists are said to be
`equal?`

if they contain equal elements arranged in the same order. For example,

```
(equal? '(this is a list) '(this is a list))
```

is true, but

```
(equal? '(this is a list) '(this (is a) list))
```

is false. To be more precise, we can define
`equal?`

recursively in terms of the basic
`eq?`

equality of symbols by saying that
`a`

and
`b`

are equal if they are both symbols and the symbols are
`eq?`

, or if they are both lists such that
`(car a)`

is
`equal? (car b)`

and
`(cdr a)`

is
`equal? (cdr b)`

. Using this idea, implement
`equal?`

as a procedure
`equal-proc?`

.

```
(check-equal? (equal? '(this is a list) '(this is a list)) #t)
(check-equal? (equal? '(this is a list) '(this (is a) list)) #f)
(check-equal? (equal-proc? '(this is a list) '(this is a list)) #t)
(check-equal? (equal-proc? '(this is a list) '(this (is a) list)) #f)
```