subst = (x, y, z) => equal(x, z) ? x :
  atom(z) ? z :
  cons(subst(x, y, car(z)), subst(x, y, cdr(z)))

assert(subst(cons('X', 'A'), 'B', cons(cons('A', 'B'), 'C')),
       cons(cons('A', cons('X', 'A')), 'C'))
