Predicates can call themselves. A recursive predicate can search all the paths through the flight database, looking for multi-leg connections.
For now, we'll avoid the problem of loops in paths by only considering flights from East to West. That is done using the flight_ew/2 rule defined in flight_data.pro.