MiniKanren run

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 n.

It returns a goal: Either success (true) or failure (false).

Examples

q is associated with #t here, since all other goals (#s) succeed.

(run* (q)
  #s
  (== #t q))

r is associated with corn, (corn here is a value)

(run* (q)
  #s
  (== corn q))