cdar = l => cdr(car(l))
sub2 = (a, z) => nil(a) ? z :
  eq(caar(a), z) ? cdar(a) :
  sub2(cdr(a), z)
sublis = (a, y) => atom(y) ? sub2(a, y) :
  cons(sublis(a, car(y)), sublis(a, cdr(y)))

assertEqual(sublis(list(cons('X', 'SHAKESPEARE'),
                        cons('Y', list('THE', 'TEMPEST'))),
                   list('X', 'WROTE', 'Y')),
           list('SHAKESPEARE', 'WROTE', list('THE', 'TEMPEST')))
