run takes in 3 arguments.
n -> inclusive limit for number of results.
q -> What we bind the results to if all the goals succeed
goals -> A collection of goals.
run* is used to refer to run with unbounded
It returns a goal: Either success (
true) or failure (
q is associated with
#t here, since all other goals (
(run* (q) #s (== #t q))
r is associated with
corn here is a value)
(run* (q) #s (== corn q))